diff options
author | Fabien Chêne <fabien@gcc.gnu.org> | 2014-03-26 22:33:28 +0100 |
---|---|---|
committer | Fabien Chêne <fabien@gcc.gnu.org> | 2014-03-26 22:33:28 +0100 |
commit | 816551fe37d92bdd0982d85fe9e833e81dd9a255 (patch) | |
tree | f68ff5496d477c9f254942a564dfada70b727292 | |
parent | c288ec8f21609193c80546000ac23ce1f1bc69e7 (diff) | |
download | gcc-816551fe37d92bdd0982d85fe9e833e81dd9a255.zip gcc-816551fe37d92bdd0982d85fe9e833e81dd9a255.tar.gz gcc-816551fe37d92bdd0982d85fe9e833e81dd9a255.tar.bz2 |
re PR c++/52369 (Const-qualified non-class base member and defaulted default constructor)
2014-03-26 Fabien Chene <fabien@gcc.gnu.org>
PR c++/52369
* 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
instead of %qD to be consistent with the c++11 diagnostic.
2014-03-26 Fabien Chene <fabien@gcc.gnu.org>
PR c++/52369
* g++.dg/init/const10.C: New.
* g++.dg/init/const11.C: New.
* g++.dg/init/pr25811.C: Adjust.
* g++.dg/init/pr29043.C: Likewise.
* g++.dg/init/pr43719.C: Likewise.
* g++.dg/init/pr44086.C: Likewise.
* g++.dg/init/ctor8.C: Likewise.
* g++.dg/init/uninitialized1.C: Likewise.
From-SVN: r208854
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/init.c | 4 | ||||
-rw-r--r-- | gcc/cp/method.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/const10.C | 33 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/const11.C | 29 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ctor8.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/pr25811.C | 90 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/pr29043.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/pr43719.C | 60 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/pr44086.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/uninitialized1.C | 6 |
12 files changed, 194 insertions, 86 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 518eb22..71f94fc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2014-03-26 Fabien Chêne <fabien@gcc.gnu.org> + PR c++/52369 + * 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 + instead of %qD to be consistent with the c++11 diagnostic. + 2014-03-25 Jason Merrill <jason@redhat.com> PR c++/60566 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 2e1cdde..f85776c 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2157,7 +2157,7 @@ diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin, "of %q#T", DECL_CONTEXT (field), origin); } inform (DECL_SOURCE_LOCATION (field), - "%qD should be initialized", field); + "%q#D should be initialized", field); } } @@ -2185,7 +2185,7 @@ diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin, "of %q#T", DECL_CONTEXT (field), origin); } inform (DECL_SOURCE_LOCATION (field), - "%qD should be initialized", field); + "%q#D should be initialized", field); } } diff --git a/gcc/cp/method.c b/gcc/cp/method.c index d72b564..11bff7f 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1110,15 +1110,23 @@ walk_field_subobs (tree fields, tree fnname, special_function_kind sfk, && default_init_uninitialized_part (mem_type)) { if (diag) - error ("uninitialized non-static const member %q#D", - field); + { + error ("uninitialized const member in %q#T", + current_class_type); + inform (DECL_SOURCE_LOCATION (field), + "%q#D should be initialized", field); + } bad = true; } else if (TREE_CODE (mem_type) == REFERENCE_TYPE) { if (diag) - error ("uninitialized non-static reference member %q#D", - field); + { + error ("uninitialized reference member in %q#T", + current_class_type); + inform (DECL_SOURCE_LOCATION (field), + "%q#D should be initialized", field); + } bad = true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cdc8e9a..a5bcb88 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2014-03-26 Fabien Chêne <fabien@gcc.gnu.org> + + PR c++/52369 + * g++.dg/init/const10.C: New. + * g++.dg/init/const11.C: New. + * g++.dg/init/pr25811.C: Adjust. + * g++.dg/init/pr29043.C: Likewise. + * g++.dg/init/pr43719.C: Likewise. + * g++.dg/init/pr44086.C: Likewise. + * g++.dg/init/ctor8.C: Likewise. + * g++.dg/init/uninitialized1.C: Likewise. + 2014-03-26 Jakub Jelinek <jakub@redhat.com> PR sanitizer/60636 diff --git a/gcc/testsuite/g++.dg/init/const10.C b/gcc/testsuite/g++.dg/init/const10.C new file mode 100644 index 0000000..ecd0db4 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/const10.C @@ -0,0 +1,33 @@ +// PR C++/52369 +// { dg-do compile { target c++11 } } + +class B // { dg-message "implicitly deleted" } + // { dg-error "uninitialized" "" { target c++11 } 4 } +{ + int const v_; // { dg-message "should be initialized" } +}; + +struct D : B {}; // { dg-error "deleted" } + +class A // { dg-message "implicitly deleted" } + // { dg-error "uninitialized" "" { target c++11 } 12 } +{ + int& ref; // { dg-message "should be initialized" } +}; + +struct C : A {}; // { dg-error "deleted" } + +void f() +{ + D d; // { dg-error "use of deleted" } + new D; // { dg-error "use of deleted" } + D(); // { dg-error "use of deleted" } + new D(); // { dg-error "use of deleted" } + + C c; // { dg-error "use of deleted" } + new C; // { dg-error "use of deleted" } + C(); // { dg-error "use of deleted" } + new C(); // { dg-error "use of deleted" } +} + + diff --git a/gcc/testsuite/g++.dg/init/const11.C b/gcc/testsuite/g++.dg/init/const11.C new file mode 100644 index 0000000..08d5185 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/const11.C @@ -0,0 +1,29 @@ +// PR C++/52369 +// { dg-do compile { target { ! c++11 } } } + +class B +{ + int const v_; // { dg-message "should be initialized" } +}; + +struct D : B {}; + +class A +{ + int& ref; // { dg-message "should be initialized" } +}; + +struct C : A {}; + +void f() +{ + D d; // { dg-error "uninitialized" } + new D; // { dg-error "uninitialized" } + D(); + new D(); + + C c; // { dg-error "uninitialized" } + new C; // { dg-error "uninitialized" } + C(); // { dg-error "value-initialization" } + new C(); // { dg-error "value-initialization" } +} diff --git a/gcc/testsuite/g++.dg/init/ctor8.C b/gcc/testsuite/g++.dg/init/ctor8.C index 7eb72eb..3c37790 100644 --- a/gcc/testsuite/g++.dg/init/ctor8.C +++ b/gcc/testsuite/g++.dg/init/ctor8.C @@ -1,6 +1,6 @@ // PR c++/29039 -typedef struct S { // { dg-error "reference" "" { target c++11 } } +typedef struct S { // { dg-error "reference" "" { target c++11 } } int &r; }; // { dg-warning "'typedef' was ignored" } diff --git a/gcc/testsuite/g++.dg/init/pr25811.C b/gcc/testsuite/g++.dg/init/pr25811.C index 0a462be..c29f406 100644 --- a/gcc/testsuite/g++.dg/init/pr25811.C +++ b/gcc/testsuite/g++.dg/init/pr25811.C @@ -1,51 +1,60 @@ // PR c++/25811 // { dg-do compile } -struct A1 // { dg-error "uninitialized" "" { target c++11 } } +struct A1 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 4 } { - int const j; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const j; // { dg-message "should be initialized" } }; -struct A2 // { dg-error "uninitialized" "" { target c++11 } } +struct A2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 10 } { - int const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const volatile i; // { dg-message "should be initialized" } }; -struct A3 // { dg-error "uninitialized" "" { target c++11 } } +struct A3 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 16 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct A4 // { dg-error "uninitialized" "" { target c++11 } } +struct A4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 22 } { - int const& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const& ref; // { dg-message "should be initialized" } }; -struct A5 // { dg-error "uninitialized" "" { target c++11 } } +struct A5 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 28 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } + int const i; // { dg-message "should be initialized" } }; -template <class T> struct S1 // { dg-error "uninitialized" "" { target c++11 } } +template <class T> struct S1 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 35 } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } }; -template <class T> struct S2 // { dg-error "uninitialized" "" { target c++11 } } +template <class T> struct S2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 41 } { - T const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const volatile i; // { dg-message "should be initialized" } }; -template <class T> struct S3 // { dg-error "uninitialized" "" { target c++11 } } +template <class T> struct S3 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 47 } { - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T& ref; // { dg-message "should be initialized" } }; -template <class T> struct S4 // { dg-error "uninitialized" "" { target c++11 } } +template <class T> struct S4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 53 } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } + T& ref; // { dg-message "should be initialized" } }; struct X @@ -55,44 +64,50 @@ struct X int const& r; }; -struct Y11 // { dg-error "uninitialized" "" { target c++11 } } +struct Y11 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 67 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Y1 // { dg-error "deleted" "" { target c++11 } } +struct Y1 // { dg-error "deleted" "" { target c++11 } } { Y11 a[1]; }; -struct Y22 // { dg-error "uninitialized" "" { target c++11 } } +struct Y22 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 78 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct Y2 // { dg-error "deleted" "" { target c++11 } } +struct Y2 // { dg-error "deleted" "" { target c++11 } } { Y22 a[1]; }; -struct Z1 // { dg-error "uninitialized" "" { target c++11 } } +struct Z1 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 89 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z2 // { dg-error "uninitialized" "" { target c++11 } } +struct Z2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 95 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct Z3 // { dg-error "uninitialized" "" { target c++11 } } +struct Z3 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 101 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z4 // { dg-error "uninitialized" "" { target c++11 } } +struct Z4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 107 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; struct Z5 @@ -100,7 +115,7 @@ struct Z5 int i; }; -struct Z // { dg-error "deleted" "" { target c++11 } } +struct Z // { dg-error "deleted" "" { target c++11 } } { Z1 z1; Z2 z2; @@ -109,9 +124,10 @@ struct Z // { dg-error "deleted" "" { target c++11 } } Z5 z5; }; -union U // { dg-error "uninitialized" "" { target c++11 } } +union U // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 127 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; void f1 () diff --git a/gcc/testsuite/g++.dg/init/pr29043.C b/gcc/testsuite/g++.dg/init/pr29043.C index f341f8c..c81c39c 100644 --- a/gcc/testsuite/g++.dg/init/pr29043.C +++ b/gcc/testsuite/g++.dg/init/pr29043.C @@ -1,9 +1,10 @@ // PR c++/29043 // { dg-do compile } -struct S // { dg-error "uninitialized" "" { target c++11 } } +struct S // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 4 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; class C @@ -13,9 +14,10 @@ public: S s; }; -struct S2 // { dg-error "uninitialized" "" { target c++11 } } +struct S2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 17 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; class C2 @@ -33,9 +35,10 @@ class C3 }; }; -struct S4 // { dg-error "uninitialized" "" { target c++11 } } +struct S4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 38 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; struct C4 @@ -46,7 +49,7 @@ struct C4 struct C5 { - C5() {} // { dg-message "uninitialized" } + C5() {} // { dg-error "uninitialized" } int const iit[ 1 ]; }; diff --git a/gcc/testsuite/g++.dg/init/pr43719.C b/gcc/testsuite/g++.dg/init/pr43719.C index 81930d0..c8cebc2 100644 --- a/gcc/testsuite/g++.dg/init/pr43719.C +++ b/gcc/testsuite/g++.dg/init/pr43719.C @@ -1,51 +1,51 @@ // PR c++/43719 // { dg-do compile } -struct A1 // { dg-error "uninitialized" "" { target c++11 } } +struct A1 // { dg-error "uninitialized" "" { target c++11 } } { - int const j; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const j; // { dg-message "should be initialized" } }; -struct A2 // { dg-error "uninitialized" "" { target c++11 } } +struct A2 // { dg-error "uninitialized" "" { target c++11 } } { - int const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const volatile i; // { dg-message "should be initialized" } }; -struct A3 // { dg-error "uninitialized" "" { target c++11 } } +struct A3 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct A4 // { dg-error "uninitialized" "" { target c++11 } } +struct A4 // { dg-error "uninitialized" "" { target c++11 } } { - int const& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const& ref; // { dg-message "should be initialized" } }; -struct A5 // { dg-error "uninitialized" "" { target c++11 } } +struct A5 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } + int const i; // { dg-message "should be initialized" } }; template <class T> struct S1 // { dg-error "uninitialized" "" { target c++11 } } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } }; template <class T> struct S2 // { dg-error "uninitialized" "" { target c++11 } } { - T const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const volatile i; // { dg-message "should be initialized" } }; template <class T> struct S3 // { dg-error "uninitialized" "" { target c++11 } } { - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T& ref; // { dg-message "should be initialized" } }; template <class T> struct S4 // { dg-error "uninitialized" "" { target c++11 } } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } + T& ref; // { dg-message "should be initialized" } }; struct X @@ -55,9 +55,9 @@ struct X int const& r; }; -struct Y11 // { dg-error "uninitialized" "" { target c++11 } } +struct Y11 // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; struct Y1 // { dg-error "deleted" "" { target c++11 } } @@ -65,9 +65,9 @@ struct Y1 // { dg-error "deleted" "" { target c++11 } } Y11 a[1]; }; -struct Y22 // { dg-error "uninitialized" "" { target c++11 } } +struct Y22 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; struct Y2 // { dg-error "deleted" "" { target c++11 } } @@ -75,24 +75,24 @@ struct Y2 // { dg-error "deleted" "" { target c++11 } } Y22 a[1]; }; -struct Z1 // { dg-error "uninitialized" "" { target c++11 } } +struct Z1 // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z2 // { dg-error "uninitialized" "" { target c++11 } } +struct Z2 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct Z3 // { dg-error "uninitialized" "" { target c++11 } } +struct Z3 // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z4 // { dg-error "uninitialized" "" { target c++11 } } +struct Z4 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; struct Z5 @@ -109,9 +109,9 @@ struct Z // { dg-error "deleted" "" { target c++11 } } Z5 z5; }; -union U // { dg-error "uninitialized" "" { target c++11 } } +union U // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; diff --git a/gcc/testsuite/g++.dg/init/pr44086.C b/gcc/testsuite/g++.dg/init/pr44086.C index 96b5bef..c3e9d4e 100644 --- a/gcc/testsuite/g++.dg/init/pr44086.C +++ b/gcc/testsuite/g++.dg/init/pr44086.C @@ -1,9 +1,9 @@ // PR c++/44086 // { dg-do compile } -struct A // { dg-error "uninitialized" "" { target c++11 } } +struct A // { dg-error "uninitialized" "" { target c++11 } } { - int const i : 2; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i : 2; // { dg-message "should be initialized" } }; void f() diff --git a/gcc/testsuite/g++.dg/init/uninitialized1.C b/gcc/testsuite/g++.dg/init/uninitialized1.C index 1e4f7ae..e8509ff 100644 --- a/gcc/testsuite/g++.dg/init/uninitialized1.C +++ b/gcc/testsuite/g++.dg/init/uninitialized1.C @@ -1,8 +1,8 @@ // PR c++/58126 -struct A { // { dg-error "uninitialized" "" { target c++11 } } - const int value1; - int& value2; +struct A { // { dg-error "uninitialized" "" { target c++11 } } + const int value1; // { dg-message "should be initialized" } + int& value2; // { dg-message "should be initialized" } }; struct B : A { }; // { dg-error "deleted" "" { target c++11 } } |