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:
parent
3752f75a6d
commit
a2b63a2001
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 *);
|
||||
|
||||
|
@ -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 ()
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
15
gcc/testsuite/g++.dg/ext/pr47213.C
Normal file
15
gcc/testsuite/g++.dg/ext/pr47213.C
Normal 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 () > ();
|
||||
}
|
Loading…
Reference in New Issue
Block a user