mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 15:41:09 +08:00
re PR c++/31663 (Segfault in constrain_class_visibility with anonymous namespace)
gcc/ChangeLog: 2007-05-02 Seongbae Park <seongbae.park@gmail.com> PR c++/31663 * c-common.c (strip_pointer_or_array_types): New function. * c-common.h (strip_pointer_or_array_types): New function declaration. gcc/cp/ChangeLog: 2007-05-02 Seongbae Park <seongbae.park@gmail.com> PR c++/31663 * decl2.c (constrain_class_visibility): Use strip_pointer_or_array_types instead of strip_array_types. gcc/testsuite/ChangeLog: 2007-05-02 Seongbae Park <seongbae.park@gmail.com> PR C++/31663 * g++.dg/warn/anonymous-namespace-2.C: New. * g++.dg/warn/anonymous-namespace-2.h: New. From-SVN: r124363
This commit is contained in:
parent
e0310afb08
commit
ba99296704
@ -1,3 +1,9 @@
|
||||
2007-05-02 Seongbae Park <seongbae.park@gmail.com>
|
||||
|
||||
PR c++/31663
|
||||
* c-common.c (strip_pointer_or_array_types): New function.
|
||||
* c-common.h (strip_pointer_or_array_types): New function declaration.
|
||||
|
||||
2007-05-03 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/31771
|
||||
|
@ -3894,6 +3894,15 @@ strip_pointer_operator (tree t)
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Recursively remove pointer or array type from TYPE. */
|
||||
tree
|
||||
strip_pointer_or_array_types (tree t)
|
||||
{
|
||||
while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
|
||||
t = TREE_TYPE (t);
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Used to compare case labels. K1 and K2 are actually tree nodes
|
||||
representing case labels, or NULL_TREE for a `default' label.
|
||||
Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
|
||||
|
@ -727,6 +727,7 @@ extern bool c_promoting_integer_type_p (tree);
|
||||
extern int self_promoting_args_p (tree);
|
||||
extern tree strip_array_types (tree);
|
||||
extern tree strip_pointer_operator (tree);
|
||||
extern tree strip_pointer_or_array_types (tree);
|
||||
extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
|
||||
|
||||
/* This is the basic parsing function. */
|
||||
|
@ -1,3 +1,9 @@
|
||||
2007-05-02 Seongbae Park <seongbae.park@gmail.com>
|
||||
|
||||
PR c++/31663
|
||||
* decl2.c (constrain_class_visibility):
|
||||
Use strip_pointer_or_array_types instead of strip_array_types.
|
||||
|
||||
2007-04-28 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR C++/30221
|
||||
|
@ -1856,7 +1856,7 @@ constrain_class_visibility (tree type)
|
||||
for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
|
||||
if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
|
||||
{
|
||||
tree ftype = strip_array_types (TREE_TYPE (t));
|
||||
tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
|
||||
int subvis = type_visibility (ftype);
|
||||
|
||||
if (subvis == VISIBILITY_ANON)
|
||||
|
@ -1,3 +1,9 @@
|
||||
2007-05-02 Seongbae Park <seongbae.park@gmail.com>
|
||||
|
||||
PR C++/31663
|
||||
* g++.dg/warn/anonymous-namespace-2.C: New.
|
||||
* g++.dg/warn/anonymous-namespace-2.h: New.
|
||||
|
||||
2007-05-02 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* gcc.dg/arm-eabi1.c: Move debug output. Augment lcmp/ulcmp tests.
|
||||
|
29
gcc/testsuite/g++.dg/warn/anonymous-namespace-2.C
Normal file
29
gcc/testsuite/g++.dg/warn/anonymous-namespace-2.C
Normal file
@ -0,0 +1,29 @@
|
||||
// Test for the warning of exposing types from an anonymous namespace
|
||||
// { dg-do compile }
|
||||
//
|
||||
#include "anonymous-namespace-2.h"
|
||||
|
||||
namespace {
|
||||
struct good { };
|
||||
}
|
||||
|
||||
struct g1 {
|
||||
good * A;
|
||||
};
|
||||
struct b1 { // { dg-warning "uses the anonymous namespace" }
|
||||
bad * B;
|
||||
};
|
||||
|
||||
struct g2 {
|
||||
good * A[1];
|
||||
};
|
||||
struct b2 { // { dg-warning "uses the anonymous namespace" }
|
||||
bad * B[1];
|
||||
};
|
||||
|
||||
struct g3 {
|
||||
good (*A)[1];
|
||||
};
|
||||
struct b3 { // { dg-warning "uses the anonymous namespace" }
|
||||
bad (*B)[1];
|
||||
};
|
3
gcc/testsuite/g++.dg/warn/anonymous-namespace-2.h
Normal file
3
gcc/testsuite/g++.dg/warn/anonymous-namespace-2.h
Normal file
@ -0,0 +1,3 @@
|
||||
namespace {
|
||||
struct bad { };
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user