aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/trans-decl.c13
-rw-r--r--gcc/fortran/trans.h1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/class_54.f9022
5 files changed, 38 insertions, 11 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b503f3a..8e3e728 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2012-10-31 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/53718
+ * trans.h (GFC_DECL_PUSH_TOPLEVEL): Removed.
+ * trans-decl.c (gfc_get_symbol_decl,gfc_generate_function_code): Remove
+ GFC_DECL_PUSH_TOPLEVEL.
+ (build_function_decl): Do not push __copy procedure to toplevel.
+
2012-10-31 Tobias Burnus <burnus@net-b.de>
PR fortran/55134
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 910b150..7750217 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1488,10 +1488,7 @@ gfc_get_symbol_decl (gfc_symbol * sym)
if (sym->attr.vtab
|| (sym->name[0] == '_' && strncmp ("__def_init", sym->name, 10) == 0))
- {
- TREE_READONLY (decl) = 1;
- GFC_DECL_PUSH_TOPLEVEL (decl) = 1;
- }
+ TREE_READONLY (decl) = 1;
return decl;
}
@@ -1923,8 +1920,7 @@ build_function_decl (gfc_symbol * sym, bool global)
/* Layout the function declaration and put it in the binding level
of the current function. */
- if (global
- || (sym->name[0] == '_' && strncmp ("__copy", sym->name, 6) == 0))
+ if (global)
pushdecl_top_level (fndecl);
else
pushdecl (fndecl);
@@ -5425,10 +5421,7 @@ gfc_generate_function_code (gfc_namespace * ns)
next = DECL_CHAIN (decl);
DECL_CHAIN (decl) = NULL_TREE;
- if (GFC_DECL_PUSH_TOPLEVEL (decl))
- pushdecl_top_level (decl);
- else
- pushdecl (decl);
+ pushdecl (decl);
decl = next;
}
saved_function_decls = NULL_TREE;
diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h
index 7e6d58c..652893e 100644
--- a/gcc/fortran/trans.h
+++ b/gcc/fortran/trans.h
@@ -824,7 +824,6 @@ struct GTY((variable_size)) lang_decl {
#define GFC_DECL_CRAY_POINTEE(node) DECL_LANG_FLAG_4(node)
#define GFC_DECL_RESULT(node) DECL_LANG_FLAG_5(node)
#define GFC_DECL_SUBREF_ARRAY_P(node) DECL_LANG_FLAG_6(node)
-#define GFC_DECL_PUSH_TOPLEVEL(node) DECL_LANG_FLAG_7(node)
#define GFC_DECL_CLASS(node) DECL_LANG_FLAG_8(node)
/* An array descriptor. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1dc498d..77a4eaa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-31 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/53718
+ * gfortran.dg/class_54.f90: New.
+
2012-10-31 Steven Bosscher <steven@gcc.gnu.org>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/gfortran.dg/class_54.f90 b/gcc/testsuite/gfortran.dg/class_54.f90
new file mode 100644
index 0000000..39c306c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_54.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR 53718: [4.7/4.8 regression] [OOP] gfortran generates asm label twice in the same output file
+!
+! Contributed by Adrian Prantl <adrian@llnl.gov>
+
+module m
+ type t
+ end type
+end module
+
+subroutine sub1
+ use m
+ class(t), pointer :: a1
+end subroutine
+
+subroutine sub2
+ use m
+ class(t), pointer :: a2
+end subroutine
+
+! { dg-final { cleanup-modules "m" } }