+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.
{
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),
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
+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.
--- /dev/null
+// 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 ];
+};
+