From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27547 invoked by alias); 1 Dec 2014 20:17:20 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 27142 invoked by uid 48); 1 Dec 2014 20:17:15 -0000 From: "kargl at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/64138] gfortran interface issue Date: Mon, 01 Dec 2014 20:17:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Version: 4.9.3 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: kargl at gcc dot gnu.org X-Bugzilla-Status: WAITING X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_status cf_reconfirmed_on everconfirmed Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2014-12/txt/msg00146.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64138 kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |WAITING Last reconfirmed| |2014-12-01 Ever confirmed|0 |1 --- Comment #4 from kargl at gcc dot gnu.org --- (In reply to kargl from comment #1) > (In reply to david from comment #0) > > Hi, > > > > I have created a complex number module: > > > > module complex_number_module > > implicit none > > > > integer, parameter :: loc_real_precision = 8 > > > > type complex_number > > real(kind=loc_real_precision) :: real_part, imag_part > > end type complex_number > > > > interface c_sub > > module procedure c_sub_cc, & ! z1 - z2 > > c_sub_cr, & ! z1 - num, where num is a > > real number > > c_sub_rc ! num - z1, where num is a > > real number > > end interface > > > > ! -------------------------------------------------------------------------- > > type (complex_number) function c_sub_cc (z1, z2) > > > > type (complex_number), intent(in) :: z1, z2 > > > > c_sub_cc%real_part = z1%real_part - z2%real_part > > c_sub_cc%imag_part = z1%imag_part - z2%imag_part > > > > end function c_sub_ccj > > > > ! -------------------------------------------------------------------------- > > type (complex_number) function c_sub_cr (z1, num) > > > > type (complex_number), intent(in) :: z1 > > real(kind=loc_real_precision), intent(in) :: num > > > > c_sub_cr%real_part = z1%real_part - num > > c_sub_cr%imag_part = z1%imag_part > > > > end function c_sub_cr > > > > ! -------------------------------------------------------------------------- > > type (complex_number) function c_sub_rc (num, z1) > > > > type (complex_number), intent(in) :: z1 > > real(kind=loc_real_precision), intent(in) :: num > > > > c_sub_rc%real_part = num - z1%real_part > > c_sub_rc%imag_part = - z1%imag_part > > > > end function c_sub_rc > > > > end module complex_number_module > > > > When I compile with gfortran (version 4.6.4), I got the following error: > > > > module_twoway_rrtmg_aero_optical_util.F:14.85: > > > > c_sub_rc ! num - z1, where num is a real number > > 1 > > > > Error: Ambiguous interfaces 'c_sub_rc' and 'c_sub_cr' in generic interface > > 'c_sub' at (1) > > > > I don't see any ambiguity and I don't encounter any problem with other > > compilers such pgi and ifort. Please advise. > > > > Cheers, > > David > > Please attach the exact code you tried to compile. The above is nonsense. I fixed the above code. I believe gfortran is correct to complain about an ambiguous interface. In the last two line below, which of c_sub_rc and c_sub_cr should be called. program foo use complex_number_module type(complex_number) a, b real(dp) x a%re = 1 a%im = 2 x = 1 b = c_sub(a, x); print '(A,2F5.1)', 'a-x = ', b%re, b%im b = c_sub(x, a); print '(A,2F5.1)', 'x-a = ', b%re, b%im b = c_sub(z1=a, num=x); print '(A,2F5.1)', 'a-x = ', b%re, b%im b = c_sub(num=x,a); print '(A,2F5.1)', 'a-x = ', b%re, b%im end program foo