From 312f3fa49dd446fc42b3783102a7f956aa0856e7 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Mon, 14 Oct 2019 11:29:33 +0000 Subject: [PATCH] decl.c (check_tag_decl): Use DECL_SOURCE_LOCATION. /cp 2019-10-14 Paolo Carlini * decl.c (check_tag_decl): Use DECL_SOURCE_LOCATION. /testsuite 2019-10-14 Paolo Carlini * g++.dg/cpp0x/constexpr-union5.C: Test location(s) too. * g++.dg/diagnostic/bitfld2.C: Likewise. * g++.dg/ext/anon-struct1.C: Likewise. * g++.dg/ext/anon-struct6.C: Likewise. * g++.dg/ext/flexary19.C: Likewise. * g++.dg/ext/flexary9.C: Likewise. * g++.dg/template/error17.C: Likewise. From-SVN: r276958 --- gcc/cp/ChangeLog | 4 ++ gcc/cp/decl.c | 6 +-- gcc/testsuite/ChangeLog | 10 +++++ gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C | 8 ++-- gcc/testsuite/g++.dg/diagnostic/bitfld2.C | 2 +- gcc/testsuite/g++.dg/ext/anon-struct1.C | 4 +- gcc/testsuite/g++.dg/ext/anon-struct6.C | 4 +- gcc/testsuite/g++.dg/ext/flexary19.C | 24 +++++----- gcc/testsuite/g++.dg/ext/flexary9.C | 44 +++++++++---------- gcc/testsuite/g++.dg/template/error17.C | 2 +- 10 files changed, 61 insertions(+), 47 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 187935d5e7e..28641071757 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2019-10-14 Paolo Carlini + + * decl.c (check_tag_decl): Use DECL_SOURCE_LOCATION. + 2019-10-14 Jakub Jelinek PR c++/92084 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 6f4c589b4b1..a9ff4275a67 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4990,9 +4990,9 @@ check_tag_decl (cp_decl_specifier_seq *declspecs, /* Anonymous unions are objects, so they can have specifiers. */; SET_ANON_AGGR_TYPE_P (declared_type); - if (TREE_CODE (declared_type) != UNION_TYPE - && !in_system_header_at (input_location)) - pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs"); + if (TREE_CODE (declared_type) != UNION_TYPE) + pedwarn (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (declared_type)), + OPT_Wpedantic, "ISO C++ prohibits anonymous structs"); } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 093bd174d2b..13988f87736 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2019-10-14 Paolo Carlini + + * g++.dg/cpp0x/constexpr-union5.C: Test location(s) too. + * g++.dg/diagnostic/bitfld2.C: Likewise. + * g++.dg/ext/anon-struct1.C: Likewise. + * g++.dg/ext/anon-struct6.C: Likewise. + * g++.dg/ext/flexary19.C: Likewise. + * g++.dg/ext/flexary9.C: Likewise. + * g++.dg/template/error17.C: Likewise. + 2019-10-14 Jakub Jelinek PR c++/92084 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C index 57796664e01..53182e65063 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C @@ -23,16 +23,16 @@ SA((a.i == 42)); struct B { - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } int h; - struct { + struct { // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" } union { unsigned char i; int j; }; int k; - }; // { dg-warning "anonymous struct" } - }; // { dg-warning "anonymous struct" } + }; + }; int l; constexpr B(): h(1), i(2), k(3), l(4) {} diff --git a/gcc/testsuite/g++.dg/diagnostic/bitfld2.C b/gcc/testsuite/g++.dg/diagnostic/bitfld2.C index 46d5ee2ab78..88e7ebf77ab 100644 --- a/gcc/testsuite/g++.dg/diagnostic/bitfld2.C +++ b/gcc/testsuite/g++.dg/diagnostic/bitfld2.C @@ -6,4 +6,4 @@ template struct A struct {} : 2; // { dg-error "expected ';' after struct" "expected" } }; // { dg-error "ISO C.. forbids declaration" "declaration" { target *-*-* } 6 } -// { dg-error "ISO C.. prohibits anonymous" "anonymous" { target *-*-* } 6 } +// { dg-error "10:ISO C.. prohibits anonymous" "anonymous" { target *-*-* } 6 } diff --git a/gcc/testsuite/g++.dg/ext/anon-struct1.C b/gcc/testsuite/g++.dg/ext/anon-struct1.C index 0a682db1ae2..ceeb8e177c1 100644 --- a/gcc/testsuite/g++.dg/ext/anon-struct1.C +++ b/gcc/testsuite/g++.dg/ext/anon-struct1.C @@ -19,7 +19,7 @@ char testD[sizeof(C::D) == sizeof(A) ? 1 : -1]; /* GNU extension. */ struct E { - struct { char z; }; /* { dg-error "prohibits anonymous structs" } */ + struct { char z; }; /* { dg-error "10:ISO C\\+\\+ prohibits anonymous structs" } */ char e; }; @@ -45,6 +45,6 @@ char testH[sizeof(H) == 2 * sizeof(A) ? 1 : -1]; /* Make sure __extension__ gets turned back off. */ struct I { - struct { char z; }; /* { dg-error "prohibits anonymous structs" } */ + struct { char z; }; /* { dg-error "10:ISO C\\+\\+ prohibits anonymous structs" } */ char i; }; diff --git a/gcc/testsuite/g++.dg/ext/anon-struct6.C b/gcc/testsuite/g++.dg/ext/anon-struct6.C index 360f25027a3..fad508a5d2f 100644 --- a/gcc/testsuite/g++.dg/ext/anon-struct6.C +++ b/gcc/testsuite/g++.dg/ext/anon-struct6.C @@ -3,8 +3,8 @@ struct A { struct - { + { // { dg-error "3:ISO C\\+\\+ prohibits anonymous structs" } struct { static int i; }; // { dg-error "prohibits anonymous structs|non-static data members|unnamed class" } void foo() { i; } // { dg-error "public non-static data" } - }; // { dg-error "prohibits anonymous structs" } + }; }; diff --git a/gcc/testsuite/g++.dg/ext/flexary19.C b/gcc/testsuite/g++.dg/ext/flexary19.C index 5eaf11b064d..abfbc43028a 100644 --- a/gcc/testsuite/g++.dg/ext/flexary19.C +++ b/gcc/testsuite/g++.dg/ext/flexary19.C @@ -146,13 +146,13 @@ struct S16 { int i; - struct { // { dg-warning "invalid use" } + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" } // A flexible array as a sole member of an anonymous struct is // rejected with an error in C mode but emits just a pedantic // warning in C++. Other than excessive pedantry there is no // reason to reject it. int a[]; - }; // { dg-warning "anonymous struct" } + }; }; struct S17 @@ -177,9 +177,9 @@ struct S19 { int i; - struct { // { dg-warning "invalid use" } + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" } int j, a[]; // { dg-message "declared here" } - }; // { dg-warning "anonymous struct" } + }; }; struct S20 @@ -198,10 +198,10 @@ struct S21 static int i; typedef int A[]; - struct { // { dg-warning "invalid use" } + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" } int j; A a; // { dg-message "declared here" } - }; // { dg-warning "anonymous struct" } + }; }; struct S22 @@ -215,11 +215,11 @@ struct S22 struct S23 { - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } static int i; // { dg-error "static data member" } int a[]; // { dg-error "in an otherwise empty" } - }; // { dg-warning "anonymous struct" } + }; }; struct S24 @@ -296,11 +296,11 @@ union A union B { - struct { - struct { // { dg-warning "invalid use" } + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } + struct { // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct|invalid use" } int i, a[]; // { dg-message "declared here" } - }; // { dg-warning "anonymous struct" } - }; // { dg-warning "anonymous struct" } + }; + }; int j; }; diff --git a/gcc/testsuite/g++.dg/ext/flexary9.C b/gcc/testsuite/g++.dg/ext/flexary9.C index 5ebcdf50757..b31e84b5fce 100644 --- a/gcc/testsuite/g++.dg/ext/flexary9.C +++ b/gcc/testsuite/g++.dg/ext/flexary9.C @@ -282,64 +282,64 @@ struct S_S_S_x { struct Anon1 { int n; - struct { // { dg-warning "invalid use \[^\n\r\]* with a zero-size array" } + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use \[^\n\r\]* with a zero-size array" } int good[0]; // { dg-warning "forbids zero-size array" } - }; // { dg-warning "anonymous struct" } + }; }; ASSERT_AT_END (Anon1, good); struct Anon2 { - struct { // { dg-warning "invalid use" } + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" } int n; - struct { + struct { // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" } int good[0]; // { dg-warning "zero-size array" } - }; // { dg-warning "anonymous struct" } - }; // { dg-warning "anonymous struct" } + }; + }; }; ASSERT_AT_END (Anon2, good); struct Anon3 { - struct { // { dg-warning "invalid use" } - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct|invalid use" } + struct { // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" } int n; int good[0]; // { dg-warning "zero-size array" } - }; // { dg-warning "anonymous struct" } - }; // { dg-warning "anonymous struct" } + }; + }; }; ASSERT_AT_END (Anon3, good); struct Anon4 { - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } int in_empty_struct[0]; // { dg-warning "zero-size array|in an otherwise empty" } - }; // { dg-warning "anonymous struct" } + }; }; struct Anon5 { - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } int not_at_end[0]; // { dg-warning "zero-size array|not at end" } - }; // { dg-warning "anonymous struct" } + }; int n; }; struct Anon6 { - struct { - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } + struct { // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" } int not_at_end[0]; // { dg-warning "zero-size array|not at end" } - }; // { dg-warning "anonymous struct" } + }; int n; - }; // { dg-warning "anonymous struct" } + }; }; struct Anon7 { - struct { - struct { + struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } + struct { // { dg-warning "12:ISO C\\+\\+ prohibits anonymous struct" } int not_at_end[0]; // { dg-warning "zero-size array|not at end" } - }; // { dg-warning "anonymous struct" } - }; // { dg-warning "anonymous struct" } + }; + }; int n; }; diff --git a/gcc/testsuite/g++.dg/template/error17.C b/gcc/testsuite/g++.dg/template/error17.C index 5b3281a1779..7803a1e89ef 100644 --- a/gcc/testsuite/g++.dg/template/error17.C +++ b/gcc/testsuite/g++.dg/template/error17.C @@ -4,6 +4,6 @@ template void foo() { - union { struct { }; }; // { dg-error "prohibits anonymous struct" "anon" } + union { struct { }; }; // { dg-error "18:ISO C\\+\\+ prohibits anonymous struct" } // { dg-error "18:anonymous struct not inside" "not inside" { target *-*-* } .-1 } } -- 2.30.2