aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2014-01-06 12:31:34 +0100
committerJanus Weil <janus@gcc.gnu.org>2014-01-06 12:31:34 +0100
commit04ba12ef8d883480ed9a178cef4e1e36be919c54 (patch)
tree7617bdd6da75d1dadd31463961b9183362654ba1 /gcc
parentc7d19c0b588cc00957d7e40d75d336c41e73fbb3 (diff)
downloadgcc-04ba12ef8d883480ed9a178cef4e1e36be919c54.zip
gcc-04ba12ef8d883480ed9a178cef4e1e36be919c54.tar.gz
gcc-04ba12ef8d883480ed9a178cef4e1e36be919c54.tar.bz2
re PR fortran/59023 (ICE in gfc_search_interface with BIND(C))
2014-01-06 Janus Weil <janus@gcc.gnu.org> PR fortran/59023 PR fortran/59662 * resolve.c (resolve_global_procedure): Don't apply to c-binding procedures. (gfc_verify_binding_labels): Remove duplicate line. 2014-01-06 Janus Weil <janus@gcc.gnu.org> PR fortran/59023 * gfortran.dg/bind_c_procs_2.f90: New. From-SVN: r206355
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/bind_c_procs_2.f9022
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 40a26db..5f24087d 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2014-01-06 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59023
+ PR fortran/59662
+ * resolve.c (resolve_global_procedure): Don't apply to c-binding
+ procedures.
+ (gfc_verify_binding_labels): Remove duplicate line.
+
2014-01-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/59547
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 0e80f49..e78788b 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2351,6 +2351,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
if ((sym->attr.if_source == IFSRC_UNKNOWN
|| sym->attr.if_source == IFSRC_IFBODY)
&& gsym->type != GSYM_UNKNOWN
+ && !gsym->binding_label
&& gsym->ns
&& gsym->ns->resolved != -1
&& gsym->ns->proc_name
@@ -10163,7 +10164,6 @@ gfc_verify_binding_labels (gfc_symbol *sym)
gsym->where = sym->declared_at;
gsym->sym_name = sym->name;
gsym->binding_label = sym->binding_label;
- gsym->binding_label = sym->binding_label;
gsym->ns = sym->ns;
gsym->mod_name = module;
if (sym->attr.function)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bf4b0f3..c46c8df 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-01-06 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/59023
+ * gfortran.dg/bind_c_procs_2.f90: New.
+
2014-01-05 John David Anglin <danglin@gcc.gnu.org>
* gcc.dg/tree-ssa/reassoc-33.c: Don't run on hppa*-*-*.
diff --git a/gcc/testsuite/gfortran.dg/bind_c_procs_2.f90 b/gcc/testsuite/gfortran.dg/bind_c_procs_2.f90
new file mode 100644
index 0000000..d3e751c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bind_c_procs_2.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR 59023: [4.9 regression] ICE in gfc_search_interface with BIND(C)
+!
+! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ type t
+ integer hidden
+ end type
+
+contains
+
+ subroutine bar
+ type(t) :: toto
+ interface
+ integer function helper() bind(c)
+ end function
+ end interface
+ toto = t(helper())
+ end subroutine
+
+end