re PR c++/29043 (Constructor for POD type with const member without member initializer accepted)
PR c++/29043 * init.c (perform_member_init): check for uninitialized const or reference members, including array types. From-SVN: r158817
This commit is contained in:
parent
928fe27c82
commit
31d1aceca6
@ -1,3 +1,9 @@
|
||||
2010-04-27 Fabien Chêne <fabien.chene@gmail.com>
|
||||
|
||||
PR c++/29043
|
||||
* init.c (perform_member_init): check for uninitialized const or
|
||||
reference members, including array types.
|
||||
|
||||
2010-04-24 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* tree.c (get_fns): Split out from get_first_fn.
|
||||
|
@ -506,6 +506,7 @@ perform_member_init (tree member, tree init)
|
||||
{
|
||||
if (init == NULL_TREE)
|
||||
{
|
||||
tree core_type;
|
||||
/* member traversal: note it leaves init NULL */
|
||||
if (TREE_CODE (type) == REFERENCE_TYPE)
|
||||
permerror (DECL_SOURCE_LOCATION (current_function_decl),
|
||||
@ -515,6 +516,11 @@ perform_member_init (tree member, tree init)
|
||||
permerror (DECL_SOURCE_LOCATION (current_function_decl),
|
||||
"uninitialized member %qD with %<const%> type %qT",
|
||||
member, type);
|
||||
|
||||
core_type = strip_array_types (type);
|
||||
if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
|
||||
|| CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
|
||||
diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false);
|
||||
}
|
||||
else if (TREE_CODE (init) == TREE_LIST)
|
||||
/* There was an explicit member initialization. Do some work
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-04-27 Fabien Chêne <fabien.chene@gmail.com>
|
||||
|
||||
PR c++/29043
|
||||
* g++.dg/init/pr29043.C: New.
|
||||
|
||||
2010-04-27 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/lookup/scoped5.C: Adjust.
|
||||
|
52
gcc/testsuite/g++.dg/init/pr29043.C
Normal file
52
gcc/testsuite/g++.dg/init/pr29043.C
Normal file
@ -0,0 +1,52 @@
|
||||
// PR c++/29043
|
||||
// { dg-do compile }
|
||||
|
||||
struct S
|
||||
{
|
||||
int const i; // { dg-message "should be initialized" }
|
||||
};
|
||||
|
||||
class C
|
||||
{
|
||||
public:
|
||||
C() {} // { dg-error "uninitialized const member" }
|
||||
S s;
|
||||
};
|
||||
|
||||
struct S2
|
||||
{
|
||||
int& ref; // { dg-message "should be initialized" }
|
||||
};
|
||||
|
||||
class C2
|
||||
{
|
||||
public:
|
||||
C2() {} // { dg-error "uninitialized reference member" }
|
||||
S2 s;
|
||||
};
|
||||
|
||||
class C3
|
||||
{
|
||||
C3() { }
|
||||
struct s {
|
||||
const int i;
|
||||
};
|
||||
};
|
||||
|
||||
struct S4
|
||||
{
|
||||
int const i; // { dg-message "should be initialized" }
|
||||
};
|
||||
|
||||
struct C4
|
||||
{
|
||||
C4() {} // { dg-error "uninitialized const member" }
|
||||
S4 s4[ 1 ];
|
||||
};
|
||||
|
||||
struct C5
|
||||
{
|
||||
C5() {} // { dg-message "uninitialized" }
|
||||
int const iit[ 1 ];
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user