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>
|
2011-01-13 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||||
|
|
||||||
PR target/47251
|
PR target/47251
|
||||||
|
|
|
@ -465,6 +465,9 @@ do { \
|
||||||
#define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition
|
#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
|
#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. */
|
/* Static stack checking is supported by means of probes. */
|
||||||
#define STACK_CHECK_STATIC_BUILTIN 1
|
#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_file_end (void);
|
||||||
extern void i386_pe_start_function (FILE *, const char *, tree);
|
extern void i386_pe_start_function (FILE *, const char *, tree);
|
||||||
extern void i386_pe_end_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_decl_assembler_name (tree, tree);
|
||||||
extern tree i386_pe_mangle_assembler_name (const char *);
|
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;
|
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
|
/* This is used as a target hook to modify the DECL_ASSEMBLER_NAME
|
||||||
in the language-independent default hook
|
in the language-independent default hook
|
||||||
langhooks,c:lhd_set_decl_assembler_name ()
|
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>
|
2011-01-12 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
|
||||||
|
|
||||||
* cp-tree.h (begin_for_scope): New prototype.
|
* 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. */
|
/* Gives the visibility specification for a class type. */
|
||||||
#define CLASSTYPE_VISIBILITY(TYPE) \
|
#define CLASSTYPE_VISIBILITY(TYPE) \
|
||||||
DECL_VISIBILITY (TYPE_NAME (TYPE))
|
DECL_VISIBILITY (TYPE_MAIN_DECL (TYPE))
|
||||||
#define CLASSTYPE_VISIBILITY_SPECIFIED(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 {
|
typedef struct GTY (()) tree_pair_s {
|
||||||
tree purpose;
|
tree purpose;
|
||||||
|
|
|
@ -2073,7 +2073,8 @@ determine_visibility (tree decl)
|
||||||
tree underlying_type = TREE_TYPE (DECL_NAME (decl));
|
tree underlying_type = TREE_TYPE (DECL_NAME (decl));
|
||||||
int underlying_vis = type_visibility (underlying_type);
|
int underlying_vis = type_visibility (underlying_type);
|
||||||
if (underlying_vis == VISIBILITY_ANON
|
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);
|
constrain_visibility (decl, underlying_vis);
|
||||||
else
|
else
|
||||||
DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
|
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>
|
2011-01-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* gfortran.dg/cray_pointers_2.f90: Use dg-timeout-factor 4.
|
* gfortran.dg/cray_pointers_2.f90: Use dg-timeout-factor 4.
|
||||||
|
|
|
@ -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