http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51788
Bug #: 51788
Summary: Unstable gfc_verify_binding_labels check for a binding
label which collides with a global entity
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: accepts-invalid, diagnostic
Severity: normal
Priority: P3
Component: fortran
AssignedTo: [email protected]
ReportedBy: [email protected]
Blocks: 51578
Found when trying to create a patch for PR 51578. Seemingly, the generated tree
is now slightly different.
The problem is that the test case
gfortran.dg/binding_label_tests_10_main.f03
fails with my patch - without, one gets the following.
However, if one swaps the lines
use binding_label_tests_10_main
use binding_label_tests_10 ! { dg-error "collides" }
I get now an error with my patch - but none with the unpatched GCC.
Hence, the test case is not stable. At least with my patch it fails in
resolve.c's gfc_verify_binding_labels as:
if (sym->attr.if_source == IFSRC_DECL
is not fulfilled. The reason is that symbols loaded from .mod files are have
IFSRC_UNKNOWN.
A "proper" error message looks as follows:
gfortran.dg/binding_label_tests_10_main.f03:11.6:
use binding_label_tests_10 ! { dg-error "collides" }
1
gfortran.dg/binding_label_tests_10_main.f03:7.45:
integer(c_int), bind(c,name="c_one") :: one ! { dg-error "collides" }
2
Error: Binding label 'c_one' at (1) collides with global entity 'c_one' at (2)
(Cf. PR 48858 comment 9 for some information about binding labels.)