Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/warn/Wredundant-tags-6.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 2b5abeee2509 |
children |
line wrap: on
line source
/* PR c++/93824 - bogus -Wredundant-tags on a first declaration in use { dg-do compile } { dg-options "-Wredundant-tags" } */ extern class C1 &c1; // { dg-bogus "\\\[-Wredundant-tags" } extern class C1 &c1; // { dg-warning "\\\[-Wredundant-tags" } void fc2 (class C2); // { dg-bogus "\\\[-Wredundant-tags" } void fc2 (class C2); // { dg-warning "\\\[-Wredundant-tags" } const int npc3 = sizeof (class C3*); // { dg-bogus "\\\[-Wredundant-tags" } const int nppc3 = sizeof (class C3**); // { dg-warning "\\\[-Wredundant-tags" } extern struct S1 *s1p; // { dg-bogus "\\\[-Wredundant-tags" } extern struct S1 s1a[]; // { dg-warning "\\\[-Wredundant-tags" } struct S3 { struct S3 *p1s3; // { dg-warning "\\\[-Wredundant-tags" } S3 *p2s3; union U1 *p1u1; // { dg-bogus "\\\[-Wredundant-tags" } union U1 *p2u1; // { dg-warning "\\\[-Wredundant-tags" } } s3; typedef struct S3 T_S3; // { dg-warning "\\\[-Wredundant-tags" } typedef struct S4 T_S4; struct S5 { struct S6 { private: // 'struct' is redundant in a declaration of a pointer to ::S5; struct S5 *ps5; // { dg-warning "\\\[-Wredundant-tags" } // 'struct' is required in a definition of a new type. struct S5 { } *ps5_2; struct S5 *p2s5_2; // { dg-warning "\\\[-Wredundant-tags" } }; }; template <int> struct TS1; // Verify redeclaration with no definition. template <> struct TS1<0>; template <> struct TS1<0>; // Verify definition after a declaration and vice versa. template <> struct TS1<1>; template <> struct TS1<1> { }; template <> struct TS1<1>; // Verify typedefs of an explicit specialization with a definition. typedef struct TS1<1> TS1_1; // { dg-warning "\\\[-Wredundant-tags" } typedef TS1<1> TS1_1; typedef struct TS1<1> TS1_1; // { dg-warning "\\\[-Wredundant-tags" } // Verify object declarations of an expplicit specialization. extern struct TS1<1> ts1_1; // { dg-warning "\\\[-Wredundant-tags" } extern TS1<1> ts1_1; extern struct TS1<1> ts1_1; // { dg-warning "\\\[-Wredundant-tags" } // Verify typedefs of an implicit specialization without a definition. typedef struct TS1<2> TS1_2; // { dg-warning "\\\[-Wredundant-tags" } typedef TS1<2> TS1_2; typedef struct TS1<2> TS1_2; // { dg-warning "\\\[-Wredundant-tags" } // Verify object declarations of an implicit specialization. extern struct TS1<2> ts1_2; // { dg-warning "\\\[-Wredundant-tags" } extern TS1<2> ts1_2; extern struct TS1<2> ts1_2; // { dg-warning "\\\[-Wredundant-tags" } // Verify partial template specialization. template <class> struct TS2; template <class T> struct TS2<const T>; template <class T> struct TS2<volatile T>; template <class T> struct TS4 { typedef struct TS2<const T> TS2_CT1; // { dg-warning "\\\[-Wredundant-tags" } typedef TS2<const T> TS2_CT2; typedef struct TS2<T> TS2_T1; // { dg-warning "\\\[-Wredundant-tags" } typedef TS2<T> TS2_T2; };