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
This commit is contained in:
Janus Weil 2012-10-31 22:55:50 +01:00
parent 03b06a8344
commit 755634e602
5 changed files with 38 additions and 11 deletions

View file

@ -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

View file

@ -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;

View file

@ -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. */

View file

@ -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>

View file

@ -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" } }