From 0df9da030c424d798044b4081865a68c2b08a5e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabien=20Ch=C3=AAne?= Date: Tue, 1 Apr 2014 23:14:04 +0200 Subject: [PATCH] init.c (perform_member_init): Homogenize uninitialized diagnostics. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2014-04-01 Fabien Chêne * cp/init.c (perform_member_init): Homogenize uninitialized diagnostics. 2014-04-01 Fabien Chêne * g++.dg/init/ctor4.C: Adjust. * g++.dg/init/ctor4-1.C: New. * g++.dg/cpp0x/defaulted2.C: Adjust. From-SVN: r208998 --- gcc/cp/ChangeLog | 9 +++++-- gcc/cp/ChangeLog-2008 | 4 ++-- gcc/cp/ChangeLog-2010 | 20 ++++++++-------- gcc/cp/ChangeLog-2011 | 2 +- gcc/cp/ChangeLog-2012 | 2 +- gcc/cp/init.c | 31 ++++++++++++++++--------- gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/ChangeLog-2008 | 2 +- gcc/testsuite/ChangeLog-2010 | 16 ++++--------- gcc/testsuite/g++.dg/cpp0x/defaulted2.C | 2 +- gcc/testsuite/g++.dg/init/ctor4-1.C | 21 +++++++++++++++++ gcc/testsuite/g++.dg/init/ctor4.C | 8 ++++--- 12 files changed, 80 insertions(+), 43 deletions(-) create mode 100644 gcc/testsuite/g++.dg/init/ctor4-1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2e6fd96afd31..332894f8ab6d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2014-04-01 Fabien Chêne + + * cp/init.c (perform_member_init): Homogenize uninitialized + diagnostics. + 2014-04-01 Jason Merrill PR c++/60708 @@ -44,9 +49,9 @@ 2014-03-26 Fabien Chêne PR c++/52369 - * cp/method.c (walk_field_subobs): improve the diagnostic + * cp/method.c (walk_field_subobs): Improve the diagnostic locations for both REFERENCE_TYPEs and non-static const members. - * cp/init.c (diagnose_uninitialized_cst_or_ref_member): use %q#D + * cp/init.c (diagnose_uninitialized_cst_or_ref_member): Use %q#D instead of %qD to be consistent with the c++11 diagnostic. 2014-03-25 Jason Merrill diff --git a/gcc/cp/ChangeLog-2008 b/gcc/cp/ChangeLog-2008 index 5a69a5d20a95..83fd123a75d0 100644 --- a/gcc/cp/ChangeLog-2008 +++ b/gcc/cp/ChangeLog-2008 @@ -307,8 +307,8 @@ * g++spec.c (LIBSTDCXX_STATIC): New. (lang_spec_driver): Use LIBSTDCXX_STATIC when not shared_libgcc. - -2008-11-05 Fabien Chene + +2008-11-05 Fabien Chêne PR c++/32519 * cp-tree.h: Fix DECL_NONSTATIC_MEMBER_P to handle member template diff --git a/gcc/cp/ChangeLog-2010 b/gcc/cp/ChangeLog-2010 index 5f563157c3af..e706b7cb8535 100644 --- a/gcc/cp/ChangeLog-2010 +++ b/gcc/cp/ChangeLog-2010 @@ -3127,13 +3127,13 @@ * typeck.c (cp_build_modify_expr): Complain about assignment to array from init list. -2010-05-10 Fabien Chêne +2010-05-10 Fabien Chêne PR c++/43719 - * decl.c (check_initializer): strip array type before checking for + * decl.c (check_initializer): Strip array type before checking for uninitialized const or ref members. -2010-05-07 Fabien Chêne +2010-05-07 Fabien Chêne PR c++/43951 * init.c (diagnose_uninitialized_cst_or_ref_member_1): Returns the @@ -3258,12 +3258,12 @@ PR c++/43779 * typeck.c (warn_args_num): New function. (convert_arguments): Use warn_args_num to print the diagnostic - messages. + messages. -2010-04-29 Fabien Chêne +2010-04-29 Fabien Chêne PR c++/43890 - * init.c (diagnose_uninitialized_cst_or_ref_member): check for + * init.c (diagnose_uninitialized_cst_or_ref_member): Check for user-provided constructor while recursing. 2010-04-28 Manuel López-Ibáñez @@ -3277,10 +3277,10 @@ * init.c (perform_member_init): Check CLASS_TYPE_P. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne PR c++/29043 - * init.c (perform_member_init): check for uninitialized const or + * init.c (perform_member_init): Check for uninitialized const or reference members, including array types. 2010-04-24 Jason Merrill @@ -3331,7 +3331,7 @@ convert_like_real. * cp-tree.h: Adjust. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne Jason Merrill PR c++/42844 @@ -3403,7 +3403,7 @@ * call.c (type_decays_to): Call cv_unqualified for non-class type. -2010-04-12 Fabien Chene +2010-04-12 Fabien Chêne > PR c++/25811 * cp-tree.h (diagnose_uninitialized_cst_or_ref_member): Declare. diff --git a/gcc/cp/ChangeLog-2011 b/gcc/cp/ChangeLog-2011 index 50659896501c..02dde6e787a3 100644 --- a/gcc/cp/ChangeLog-2011 +++ b/gcc/cp/ChangeLog-2011 @@ -3511,7 +3511,7 @@ 2011-05-07 Fabien Chêne PR c++/48859 - * init.c (diagnose_uninitialized_cst_or_ref_member_1): stop the + * init.c (diagnose_uninitialized_cst_or_ref_member_1): Stop the recursion if there is user defined constructor. 2011-05-09 Jason Merrill diff --git a/gcc/cp/ChangeLog-2012 b/gcc/cp/ChangeLog-2012 index a57051ebf5fa..e63a3f79d1d8 100644 --- a/gcc/cp/ChangeLog-2012 +++ b/gcc/cp/ChangeLog-2012 @@ -2716,7 +2716,7 @@ 2012-02-16 Fabien Chêne PR c++/52126 - * decl.c (xref_basetypes): call dependent_scope_p instead of + * decl.c (xref_basetypes): Call dependent_scope_p instead of dependent_type_p. 2012-02-16 Jason Merrill diff --git a/gcc/cp/init.c b/gcc/cp/init.c index f85776c5ec75..fdc1011f1989 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -694,11 +694,14 @@ perform_member_init (tree member, tree init) if (CP_TYPE_CONST_P (type) && init == NULL_TREE && default_init_uninitialized_part (type)) - /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a - vtable; still give this diagnostic. */ - permerror (DECL_SOURCE_LOCATION (current_function_decl), - "uninitialized member %qD with % type %qT", - member, type); + { + /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a + vtable; still give this diagnostic. */ + if (permerror (DECL_SOURCE_LOCATION (current_function_decl), + "uninitialized const member in %q#T", type)) + inform (DECL_SOURCE_LOCATION (member), + "%q#D should be initialized", member ); + } finish_expr_stmt (build_aggr_init (decl, init, flags, tf_warning_or_error)); } @@ -710,13 +713,19 @@ perform_member_init (tree member, tree init) tree core_type; /* member traversal: note it leaves init NULL */ if (TREE_CODE (type) == REFERENCE_TYPE) - permerror (DECL_SOURCE_LOCATION (current_function_decl), - "uninitialized reference member %qD", - member); + { + if (permerror (DECL_SOURCE_LOCATION (current_function_decl), + "uninitialized reference member in %q#T", type)) + inform (DECL_SOURCE_LOCATION (member), + "%q#D should be initialized", member); + } else if (CP_TYPE_CONST_P (type)) - permerror (DECL_SOURCE_LOCATION (current_function_decl), - "uninitialized member %qD with % type %qT", - member, type); + { + if (permerror (DECL_SOURCE_LOCATION (current_function_decl), + "uninitialized const member in %q#T", type)) + inform (DECL_SOURCE_LOCATION (member), + "%q#D should be initialized", member ); + } core_type = strip_array_types (type); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c802f14e6ed5..7092fa705493 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-04-01 Fabien Chêne + + * g++.dg/init/ctor4.C: Adjust. + * g++.dg/init/ctor4-1.C: New. + * g++.dg/cpp0x/defaulted2.C: Adjust. + 2014-04-01 Richard Henderson PR target/60704 diff --git a/gcc/testsuite/ChangeLog-2008 b/gcc/testsuite/ChangeLog-2008 index ca95319cbd47..2c354ff448f7 100644 --- a/gcc/testsuite/ChangeLog-2008 +++ b/gcc/testsuite/ChangeLog-2008 @@ -1814,7 +1814,7 @@ * gcc.dg/Warray-bounds-5.c: New test. * gcc.dg/Warray-bounds-6.c: New test. -2008-11-05 Fabien Chene +2008-11-05 Fabien Chene PR c++/32519 * g++.dg/template/pr32519.C: New test. diff --git a/gcc/testsuite/ChangeLog-2010 b/gcc/testsuite/ChangeLog-2010 index b8d94644a479..47f39a3bc4aa 100644 --- a/gcc/testsuite/ChangeLog-2010 +++ b/gcc/testsuite/ChangeLog-2010 @@ -11264,7 +11264,7 @@ * g++.dg/cpp0x/initlist26.C: Adjust. * g++.dg/cpp0x/initlist28.C: Adjust. -2010-05-10 Fabien Chêne +2010-05-10 Fabien Chêne PR c++/43719 * g++.dg/init/pr43719.C: New. @@ -11389,7 +11389,7 @@ * gnat.dg/sizetype3.ad[sb]: New test. * gnat.dg/sizetype3_pkg.ads: New helper. -2010-05-07 Fabien Chêne +2010-05-07 Fabien Chêne PR c++/43951 * g++.dg/init/new29.C: New. @@ -11738,12 +11738,6 @@ * gcc.dg/tree-ssa/builtin-free.c: New testcase. -2010-04-29 Fabien Chêne - - PR c++/43890 - * init.c (diagnose_uninitialized_cst_or_ref_member): check for - user-provided constructor while recursing. - 2010-04-29 Janus Weil PR fortran/42274 @@ -11866,7 +11860,7 @@ * g++.dg/template/pr23510.C: Update. * lib/prune.exp: Filter out 'recursively instantiated'. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne PR c++/29043 * g++.dg/init/pr29043.C: New. @@ -11898,7 +11892,7 @@ * g++.dg/template/sfinae17.C: New. * g++.dg/template/sfinae18.C: New. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne * g++.dg/init/pr42844.C: New. * g++.dg/cpp0x/pr42844-2.C: New. @@ -12500,7 +12494,7 @@ * g++.dg/cpp0x/lambda/lambda-conv4.C: New. * g++.dg/cpp0x/lambda/lambda-deduce2.C: New. -2010-04-12 Fabien Chene +2010-04-12 Fabien Chene PR c++/25811 * g++.dg/init/pr25811.C: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C index bd83c7fb279e..63be99754cd6 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C @@ -35,7 +35,7 @@ struct D: public C struct E { - const B b; + const B b; // { dg-message "should be initialized" } E() { } // { dg-error "uninitialized" } }; diff --git a/gcc/testsuite/g++.dg/init/ctor4-1.C b/gcc/testsuite/g++.dg/init/ctor4-1.C new file mode 100644 index 000000000000..1333b35f9ddf --- /dev/null +++ b/gcc/testsuite/g++.dg/init/ctor4-1.C @@ -0,0 +1,21 @@ +// { dg-do compile } + +class foo { +public: + foo(); +}; + +class bar: public foo { // { dg-error "uninitialized" } + // { dg-message "implicitly deleted" "" { target c++11 } 8 } +private: + int const a; // { dg-message "should be initialized" } +}; + +foo::foo() { +} + +int main(int argc, char **argv) +{ + bar x; // { dg-error "deleted" "" { target c++11 } } + // { dg-message "synthesized" "" { target { ! c++11 } } 19 } +} diff --git a/gcc/testsuite/g++.dg/init/ctor4.C b/gcc/testsuite/g++.dg/init/ctor4.C index 1c92bb973d31..21034b6796d0 100644 --- a/gcc/testsuite/g++.dg/init/ctor4.C +++ b/gcc/testsuite/g++.dg/init/ctor4.C @@ -6,9 +6,10 @@ public: foo(); }; -class bar: public foo { // { dg-error "reference|bar::bar" } +class bar: public foo { // { dg-error "uninitialized" } + // { dg-message "implicitly deleted" "" { target c++11 } 9 } private: - int &a; + int &a; // { dg-message "should be initialized" } }; foo::foo() { @@ -16,5 +17,6 @@ foo::foo() { int main(int argc, char **argv) { - bar x; // { dg-message "synthesized|deleted" } + bar x; // { dg-error "deleted" "" { target c++11 } } + // { dg-message "synthesized" "" { target { ! c++11 } } 20 } } -- 2.47.2