Bug 30410

Summary: Host association bug w/ EXTERNAL
Product: gcc Reporter: Harald Anlauf <anlauf>
Component: fortranAssignee: Paul Thomas <pault>
Status: RESOLVED FIXED    
Severity: normal CC: burnus, gcc-bugs
Priority: P3 Keywords: wrong-code
Version: 4.3.0   
Target Milestone: ---   
Host: i686-pc-linux-gnu Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2007-01-09 08:59:54
Attachments: Demo code

Description Harald Anlauf 2007-01-08 22:03:08 UTC
The attached code demostrates a host association bug
with a declaration of an external function in a module.
The incorrect reference can be verified by looking at
the assembler or object files generated.

% gfc gfcbug53.f90
/tmp/ccDZrLiD.o(.text+0x37): In function `__mod2__foo':
: undefined reference to `__mod2__extfunc'
% gfc gfcbug53.f90 -c && nm gfcbug53.o |grep extfunc
         U __mod2__extfunc
00000047 T extfunc_

See the lines
  real, external :: extfunc     ! This EXTERNAL refers to the wrong namespace
                                ! Check with: nm gfcbug53.o |grep extfunc
and the attached code for details.

Cheers,
-ha
Comment 1 Harald Anlauf 2007-01-08 22:04:17 UTC
Created attachment 12872 [details]
Demo code
Comment 2 Paul Thomas 2007-01-09 08:59:54 UTC
I am just about to submit a patch.

Paul
Comment 3 patchapp@dberlin.org 2007-01-09 09:10:27 UTC
Subject: Bug number PR30410

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-01/msg00647.html
Comment 4 Paul Thomas 2007-01-14 14:43:18 UTC
Subject: Bug 30410

Author: pault
Date: Sun Jan 14 14:43:08 2007
New Revision: 120771

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=120771
Log:
2007-01-14  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/30410
	* trans-decl.c (gfc_sym_mangled_function_id): Module, external
	symbols must not have the module name prepended.

2007-01-14  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/30410
	* gfortran.dg/external_procedures_2.f90: New test.

Added:
    trunk/gcc/testsuite/gfortran.dg/external_procedures_2.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/trans-decl.c
    trunk/gcc/testsuite/ChangeLog

Comment 5 Paul Thomas 2007-01-14 14:50:17 UTC
Subject: Bug 30410

Author: pault
Date: Sun Jan 14 14:49:50 2007
New Revision: 120772

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=120772
Log:
2007-01-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
	    Paul Thomas  <pault@gcc.gnu.org>

	Back port from trunk

	PR fortran/30408
	* lang.opt: Add Wcharacter_truncation option.
	* options.c (gfc_init_options): Initialize
	gfc_option.warn_character_truncation to zero.
	(gfc_handle_option): Add case for OPT_Wcharacter_truncation.

	PR fortran/30408
	* resolve.c (resolve_code): Use the code->expr character length
	directly to set length of llen.

2007-01-14  Paul Thomas  <pault@gcc.gnu.org>

	Backports from trunk

	PR fortran/23232
	* decl.c (gfc_in_match_data, gfc_set_in_match_data): New
	functions to signal that a DATA statement is being matched.
	(gfc_match_data): Call gfc_set_in_match_data on entry and on
	exit.
	* gfortran.h : Add prototypes for above.
	* expr.c (check_init_expr): Avoid check on parameter or
	variable if gfc_in_match_data is true.
	(gfc_match_init_expr): Do not call error on non-reduction of
	expression if gfc_in_match_data is true.

	PR fortran/27996
	PR fortran/27998
	* decl.c (gfc_set_constant_character_len): Add boolean arg to
	flag array constructor resolution.  Warn if string is being
	truncated.  Standard dependent error if string is padded. Set
	new arg to false for all three calls to
	gfc_set_constant_character_len.
	* match.h : Add boolean arg to prototype for
	gfc_set_constant_character_len.
	* gfortran.h : Add warn_character_truncation to gfc_options.
	* options.c (set_Wall): Set warn_character_truncation if -Wall
	is set.
	* resolve.c (resolve_code): Warn if rhs string in character
	assignment has to be truncated.
	* array.c (gfc_resolve_character_array_constructor): Set new
	argument to true for call to gfc_set_constant_character_len.

	PR fortran/30410
	* trans-decl.c (gfc_sym_mangled_function_id): Module, external
	symbols must not have the module name prepended.

2007-01-14  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/23232
	* gfortran.dg/data_implied_do_1.f90: New test.

	PR fortran/27996
	PR fortran/27998
	* gfortran.dg/char_length_1.f90: New test.

	PR fortran/30410
	* gfortran.dg/external_procedures_2.f90: New test.

Added:
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/char_length_1.f90
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/data_implied_do_1.f90
    branches/gcc-4_2-branch/gcc/testsuite/gfortran.dg/external_procedures_2.f90
Modified:
    branches/gcc-4_2-branch/gcc/fortran/ChangeLog
    branches/gcc-4_2-branch/gcc/fortran/array.c
    branches/gcc-4_2-branch/gcc/fortran/decl.c
    branches/gcc-4_2-branch/gcc/fortran/expr.c
    branches/gcc-4_2-branch/gcc/fortran/gfortran.h
    branches/gcc-4_2-branch/gcc/fortran/lang.opt
    branches/gcc-4_2-branch/gcc/fortran/match.h
    branches/gcc-4_2-branch/gcc/fortran/options.c
    branches/gcc-4_2-branch/gcc/fortran/resolve.c
    branches/gcc-4_2-branch/gcc/fortran/trans-decl.c
    branches/gcc-4_2-branch/gcc/testsuite/ChangeLog

Comment 6 Paul Thomas 2007-01-14 14:55:13 UTC
Fixed on trunk and 4.2

Paul