From: Paolo Carlini Date: Wed, 8 Jun 2016 19:31:55 +0000 (+0000) Subject: decl.c (maybe_deduce_size_from_array_init): Use DECL_SOURCE_LOCATION in error_at. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c8a715894d9192f33d526b5c2b058ce937303b79;p=gcc.git decl.c (maybe_deduce_size_from_array_init): Use DECL_SOURCE_LOCATION in error_at. /cp 2016-06-08 Paolo Carlini * decl.c (maybe_deduce_size_from_array_init): Use DECL_SOURCE_LOCATION in error_at. (layout_var_decl): Likewise. (check_array_initializer): Likewise. (check_initializer): Likewise. (duplicate_decls, check_elaborated_type_specifier): Tidy. /testsuite 2016-06-08 Paolo Carlini * g++.dg/init/array42.C: New. * g++.dg/init/array43.C: Likewise. * g++.dg/init/array44.C: Likewise. * g++.dg/init/array45.C: Likewise. * g++.dg/cpp0x/constexpr-ice10.C: Test column number too. * g++.dg/cpp0x/constexpr-incomplete1.C: Likewise. * g++.dg/cpp1y/auto-fn27.C: Likewise. * g++.dg/gomp/pr35751.C: Likewise. * g++.dg/init/array23.C: Likewise. * g++.dg/init/brace2.C: Likewise. * g++.dg/init/brace6.C: Likewise. From-SVN: r237240 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4162e20ded7..54c838bfeaa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2016-06-08 Paolo Carlini + + * decl.c (maybe_deduce_size_from_array_init): Use + DECL_SOURCE_LOCATION in error_at. + (layout_var_decl): Likewise. + (check_array_initializer): Likewise. + (check_initializer): Likewise. + (duplicate_decls, check_elaborated_type_specifier): Tidy. + 2016-06-08 Martin Sebor Jakub Jelinek diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 3328e7158aa..ca36171d4f5 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1393,7 +1393,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) { if (DECL_INITIAL (olddecl)) inform (DECL_SOURCE_LOCATION (olddecl), - "previous definition of %q+D was here", olddecl); + "previous definition of %qD was here", olddecl); else inform (DECL_SOURCE_LOCATION (olddecl), "previous declaration of %qD was here", olddecl); @@ -5266,13 +5266,16 @@ maybe_deduce_size_from_array_init (tree decl, tree init) do_default); if (failure == 1) { - error ("initializer fails to determine size of %qD", decl); + error_at (EXPR_LOC_OR_LOC (initializer, + DECL_SOURCE_LOCATION (decl)), + "initializer fails to determine size of %qD", decl); } else if (failure == 2) { if (do_default) { - error ("array size missing in %qD", decl); + error_at (DECL_SOURCE_LOCATION (decl), + "array size missing in %qD", decl); } /* If a `static' var's size isn't known, make it extern as well as static, so it does not get allocated. If it's not @@ -5283,7 +5286,8 @@ maybe_deduce_size_from_array_init (tree decl, tree init) } else if (failure == 3) { - error ("zero-size array %qD", decl); + error_at (DECL_SOURCE_LOCATION (decl), + "zero-size array %qD", decl); } } @@ -5322,7 +5326,8 @@ layout_var_decl (tree decl) /* An automatic variable with an incomplete type: that is an error. Don't talk about array types here, since we took care of that message in grokdeclarator. */ - error ("storage size of %qD isn%'t known", decl); + error_at (DECL_SOURCE_LOCATION (decl), + "storage size of %qD isn%'t known", decl); TREE_TYPE (decl) = error_mark_node; } #if 0 @@ -5345,7 +5350,8 @@ layout_var_decl (tree decl) constant_expression_warning (DECL_SIZE (decl)); else { - error ("storage size of %qD isn%'t constant", decl); + error_at (DECL_SOURCE_LOCATION (decl), + "storage size of %qD isn%'t constant", decl); TREE_TYPE (decl) = error_mark_node; } } @@ -5954,7 +5960,8 @@ check_array_initializer (tree decl, tree type, tree init) if (!COMPLETE_TYPE_P (complete_type (element_type))) { if (decl) - error ("elements of array %q#D have incomplete type", decl); + error_at (DECL_SOURCE_LOCATION (decl), + "elements of array %q#D have incomplete type", decl); else error ("elements of array %q#T have incomplete type", type); return true; @@ -6018,7 +6025,8 @@ check_initializer (tree decl, tree init, int flags, vec **cleanups) } else if (!COMPLETE_TYPE_P (type)) { - error ("%q#D has incomplete type", decl); + error_at (DECL_SOURCE_LOCATION (decl), + "%q#D has incomplete type", decl); TREE_TYPE (decl) = error_mark_node; return NULL_TREE; } @@ -6038,8 +6046,9 @@ check_initializer (tree decl, tree init, int flags, vec **cleanups) } else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE) { - error ("scalar object %qD requires one element in initializer", - decl); + error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)), + "scalar object %qD requires one element in " + "initializer", decl); TREE_TYPE (decl) = error_mark_node; return NULL_TREE; } @@ -6081,9 +6090,10 @@ check_initializer (tree decl, tree init, int flags, vec **cleanups) { /* Don't reshape if the class has constructors. */ if (cxx_dialect == cxx98) - error ("in C++98 %qD must be initialized by constructor, " - "not by %<{...}%>", - decl); + error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)), + "in C++98 %qD must be initialized by " + "constructor, not by %<{...}%>", + decl); } else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type)) { @@ -6175,8 +6185,11 @@ check_initializer (tree decl, tree init, int flags, vec **cleanups) && DECL_INITIAL (decl) && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl))) - warning (0, "array %qD initialized by parenthesized string literal %qE", - decl, DECL_INITIAL (decl)); + warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl), + DECL_SOURCE_LOCATION (decl)), + 0, "array %qD initialized by parenthesized " + "string literal %qE", + decl, DECL_INITIAL (decl)); init = NULL; } } @@ -12528,14 +12541,14 @@ check_elaborated_type_specifier (enum tag_types tag_code, && tag_code != typename_type) { error ("%qT referred to as %qs", type, tag_name (tag_code)); - inform (input_location, "%q+T has a previous declaration here", type); + inform (location_of (type), "%qT has a previous declaration here", type); return error_mark_node; } else if (TREE_CODE (type) != ENUMERAL_TYPE && tag_code == enum_type) { error ("%qT referred to as enum", type); - inform (input_location, "%q+T has a previous declaration here", type); + inform (location_of (type), "%qT has a previous declaration here", type); return error_mark_node; } else if (!allow_template_p diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb704589deb..ab6395e9051 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2016-06-08 Paolo Carlini + + * g++.dg/init/array42.C: New. + * g++.dg/init/array43.C: Likewise. + * g++.dg/init/array44.C: Likewise. + * g++.dg/init/array45.C: Likewise. + * g++.dg/cpp0x/constexpr-ice10.C: Test column number too. + * g++.dg/cpp0x/constexpr-incomplete1.C: Likewise. + * g++.dg/cpp1y/auto-fn27.C: Likewise. + * g++.dg/gomp/pr35751.C: Likewise. + * g++.dg/init/array23.C: Likewise. + * g++.dg/init/brace2.C: Likewise. + * g++.dg/init/brace6.C: Likewise. + 2016-06-08 Martin Sebor Jakub Jelinek diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C index f6fc80cdc70..51612737847 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C @@ -4,5 +4,5 @@ struct A { constexpr A() {} - static constexpr A a[2] = {}; // { dg-error "incomplete" } + static constexpr A a[2] = {}; // { dg-error "22:elements of array 'constexpr const A A::a \\\[2\\\]' have incomplete type" } }; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C index 514cca59c33..7b0d83e608d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C @@ -2,6 +2,6 @@ struct A { - static constexpr A a = 1; // { dg-error "incomplete" } + static constexpr A a = 1; // { dg-error "22:'constexpr const A A::a' has incomplete type" } constexpr A(int i) { } }; diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn27.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn27.C index c9291c2b8e4..b114df2fdd5 100644 --- a/gcc/testsuite/g++.dg/cpp1y/auto-fn27.C +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn27.C @@ -31,7 +31,7 @@ F::bar (const G &) { auto s = I; typedef decltype (s) L; - auto u =[&](L) { auto t = foo (J::K (), 0); }; // { dg-error "" } + auto u =[&](L) { auto t = foo (J::K (), 0); }; // { dg-error "25:'void t' has incomplete type" } } struct B { typedef int G; diff --git a/gcc/testsuite/g++.dg/gomp/pr35751.C b/gcc/testsuite/g++.dg/gomp/pr35751.C index 0b6cded5929..a8acce05f51 100644 --- a/gcc/testsuite/g++.dg/gomp/pr35751.C +++ b/gcc/testsuite/g++.dg/gomp/pr35751.C @@ -5,8 +5,8 @@ void foo (int i) { - extern int a[i]; // { dg-error "storage size of" } - static int b[i]; // { dg-error "storage size of" } + extern int a[i]; // { dg-error "14:storage size of" } + static int b[i]; // { dg-error "14:storage size of" } #pragma omp parallel { diff --git a/gcc/testsuite/g++.dg/init/array23.C b/gcc/testsuite/g++.dg/init/array23.C index 80ffb0a98cc..fbcd39e2c3a 100644 --- a/gcc/testsuite/g++.dg/init/array23.C +++ b/gcc/testsuite/g++.dg/init/array23.C @@ -3,4 +3,4 @@ // array struct A {A();int A::* t;}; -A x[]; // { dg-error "size" } +A x[]; // { dg-error "3:array size missing" } diff --git a/gcc/testsuite/g++.dg/init/array42.C b/gcc/testsuite/g++.dg/init/array42.C new file mode 100644 index 00000000000..d16a9ea11ce --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array42.C @@ -0,0 +1 @@ +char a[] = ("abc"); // { dg-warning "6:array 'a' initialized by parenthesized string literal" } diff --git a/gcc/testsuite/g++.dg/init/array43.C b/gcc/testsuite/g++.dg/init/array43.C new file mode 100644 index 00000000000..37ef2411518 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array43.C @@ -0,0 +1,2 @@ +int a[] = 0; // { dg-error "5:initializer fails to determine size" } +// { dg-error "11:array must be initialized" "" { target *-*-* } 1 } diff --git a/gcc/testsuite/g++.dg/init/array44.C b/gcc/testsuite/g++.dg/init/array44.C new file mode 100644 index 00000000000..5643c81f218 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array44.C @@ -0,0 +1 @@ +int a[] = { }; // { dg-error "5:zero-size array" } diff --git a/gcc/testsuite/g++.dg/init/array45.C b/gcc/testsuite/g++.dg/init/array45.C new file mode 100644 index 00000000000..ee4451df5ff --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array45.C @@ -0,0 +1 @@ +int a[]; // { dg-error "5:storage size" } diff --git a/gcc/testsuite/g++.dg/init/brace2.C b/gcc/testsuite/g++.dg/init/brace2.C index 50dc4813954..e6307525fbf 100644 --- a/gcc/testsuite/g++.dg/init/brace2.C +++ b/gcc/testsuite/g++.dg/init/brace2.C @@ -3,6 +3,6 @@ int x = { 2 }; const char * y = { "hello" }; int a = 2; -int b = { 2,3 }; // { dg-error "requires one element in initializer" } +int b = { 2,3 }; // { dg-error "5:scalar object 'b' requires one element in initializer" } int c = { { 2 } } ; // { dg-error "braces around scalar initializer" } int d = {}; // { dg-error "initializer" "" { target { ! c++11 } } } diff --git a/gcc/testsuite/g++.dg/init/brace6.C b/gcc/testsuite/g++.dg/init/brace6.C index 0fa818c80c0..f8452351d12 100644 --- a/gcc/testsuite/g++.dg/init/brace6.C +++ b/gcc/testsuite/g++.dg/init/brace6.C @@ -17,8 +17,8 @@ struct D { int c; }; int main() { int i = { 1 }; - int j = { 1, 2 }; /* { dg-error "requires one element" } */ - A a = { 6 }; /* { dg-error "initialize" "" { target { ! c++11 } } } */ + int j = { 1, 2 }; /* { dg-error "8:scalar object 'j' requires one element" } */ + A a = { 6 }; /* { dg-error "6:in C\\+\\+98 'a' must be initialized" "" { target { ! c++11 } } } */ B b = { 6 }; /* { dg-error "" } */ C c = { 6 }; /* { dg-error "too many initializers" } */ D d = { 6 };