diff options
author | Janus Weil <janus@gcc.gnu.org> | 2012-10-31 22:55:50 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2012-10-31 22:55:50 +0100 |
commit | 755634e60252de3270554fd06c222da98128c3ac (patch) | |
tree | b6e33fd27397f05e68dceaea242adf1b7842646d | |
parent | 03b06a83441cac588cf04f494915ffd3868a9bed (diff) | |
download | gcc-755634e60252de3270554fd06c222da98128c3ac.zip gcc-755634e60252de3270554fd06c222da98128c3ac.tar.gz gcc-755634e60252de3270554fd06c222da98128c3ac.tar.bz2 |
re PR fortran/53718 ([OOP] gfortran generates asm label twice in the same output file)
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 Janus Weil <janus@gcc.gnu.org>
PR fortran/53718
* gfortran.dg/class_54.f90: New.
From-SVN: r193048
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 13 | ||||
-rw-r--r-- | gcc/fortran/trans.h | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_54.f90 | 22 |
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" } } |