re PR c++/47213 (ICE: SIGSEGV in determine_visibility (decl2.c:2076) with -fvisibility-ms-compat)

2011-01-13  Kai Tietz  <kai.tietz@onevision.com>

	PR c++/47213
	* g++.dg/ext/pr47213.C: New.

2011-01-13  Kai Tietz  <kai.tietz@onevision.com>

	PR c++/47213
	* cp-tree.h (CLASSTYPE_VISIBILITY): Use
	TYPE_MAIN_DECL instead of TYPE_NAME.
	(CLASSTYPE_VISIBILITY_SPECIFIED): Likewise.
	* decl2.c (determine_visibility): Add check
	of CLASS_TYPE_P for underlying_type.

2011-01-13  Kai Tietz  <kai.tietz@onevision.com>

	PR c++/47213
	* config/i386/cygming.h (TARGET_ASM_ASSEMBLE_VISIBILITY):
	PE specific hook.
	* config/i386/i386-protos.h (i386_pe_assemble_visibility):
	New function prototype.
	* config/i386/winnt.c (i386_pe_assemble_visibility):
	Warn only if attribute was specified by user.

From-SVN: r168763
This commit is contained in:
Kai Tietz 2011-01-13 20:01:57 +00:00 committed by Kai Tietz
parent 3752f75a6d
commit a2b63a2001
9 changed files with 63 additions and 3 deletions

View File

@ -1,3 +1,13 @@
2011-01-13 Kai Tietz <kai.tietz@onevision.com>
PR c++/47213
* config/i386/cygming.h (TARGET_ASM_ASSEMBLE_VISIBILITY):
PE specific hook.
* config/i386/i386-protos.h (i386_pe_assemble_visibility):
New function prototype.
* config/i386/winnt.c (i386_pe_assemble_visibility):
Warn only if attribute was specified by user.
2011-01-13 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/47251

View File

@ -465,6 +465,9 @@ do { \
#define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition
#define TARGET_MANGLE_DECL_ASSEMBLER_NAME i386_pe_mangle_decl_assembler_name
#undef TARGET_ASM_ASSEMBLE_VISIBILITY
#define TARGET_ASM_ASSEMBLE_VISIBILITY i386_pe_assemble_visibility
/* Static stack checking is supported by means of probes. */
#define STACK_CHECK_STATIC_BUILTIN 1

View File

@ -225,6 +225,7 @@ extern void i386_pe_asm_output_aligned_decl_common (FILE *, tree,
extern void i386_pe_file_end (void);
extern void i386_pe_start_function (FILE *, const char *, tree);
extern void i386_pe_end_function (FILE *, const char *, tree);
extern void i386_pe_assemble_visibility (tree, int);
extern tree i386_pe_mangle_decl_assembler_name (tree, tree);
extern tree i386_pe_mangle_assembler_name (const char *);

View File

@ -232,6 +232,22 @@ i386_pe_maybe_mangle_decl_assembler_name (tree decl, tree id)
return new_id;
}
/* Emit an assembler directive to set symbol for DECL visibility to
the visibility type VIS, which must not be VISIBILITY_DEFAULT.
As for PE there is no hidden support in gas, we just warn for
user-specified visibility attributes. */
void
i386_pe_assemble_visibility (tree decl,
int vis ATTRIBUTE_UNUSED)
{
if (!decl
|| !lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
return;
warning (OPT_Wattributes, "visibility attribute not supported "
"in this configuration; ignored");
}
/* This is used as a target hook to modify the DECL_ASSEMBLER_NAME
in the language-independent default hook
langhooks,c:lhd_set_decl_assembler_name ()

View File

@ -1,3 +1,12 @@
2011-01-13 Kai Tietz <kai.tietz@onevision.com>
PR c++/47213
* cp-tree.h (CLASSTYPE_VISIBILITY): Use
TYPE_MAIN_DECL instead of TYPE_NAME.
(CLASSTYPE_VISIBILITY_SPECIFIED): Likewise.
* decl2.c (determine_visibility): Add check
of CLASS_TYPE_P for underlying_type.
2011-01-12 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
* cp-tree.h (begin_for_scope): New prototype.

View File

@ -1221,9 +1221,9 @@ enum languages { lang_c, lang_cplusplus, lang_java };
/* Gives the visibility specification for a class type. */
#define CLASSTYPE_VISIBILITY(TYPE) \
DECL_VISIBILITY (TYPE_NAME (TYPE))
DECL_VISIBILITY (TYPE_MAIN_DECL (TYPE))
#define CLASSTYPE_VISIBILITY_SPECIFIED(TYPE) \
DECL_VISIBILITY_SPECIFIED (TYPE_NAME (TYPE))
DECL_VISIBILITY_SPECIFIED (TYPE_MAIN_DECL (TYPE))
typedef struct GTY (()) tree_pair_s {
tree purpose;

View File

@ -2073,7 +2073,8 @@ determine_visibility (tree decl)
tree underlying_type = TREE_TYPE (DECL_NAME (decl));
int underlying_vis = type_visibility (underlying_type);
if (underlying_vis == VISIBILITY_ANON
|| CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type))
|| (CLASS_TYPE_P (underlying_type)
&& CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
constrain_visibility (decl, underlying_vis);
else
DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;

View File

@ -1,3 +1,8 @@
2011-01-13 Kai Tietz <kai.tietz@onevision.com>
PR c++/47213
* g++.dg/ext/pr47213.C: New.
2011-01-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gfortran.dg/cray_pointers_2.f90: Use dg-timeout-factor 4.

View File

@ -0,0 +1,15 @@
// { dg-do compile }
// { dg-options "-fvisibility-ms-compat" }
#include <typeinfo>
template < typename T > void
bar ()
{
typeid (T);
}
void
foo ()
{
bar < int () > ();
}