Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/warn/Wredundant-tags.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
/* PR c++/61339 - add mismatch between struct and class Test to verify that -Wredundant-tags is issued for references to class types that use the class-key even though they don't need to. { dg-do compile } { dg-options "-Wredundant-tags" } */ struct A; extern A *pa; extern struct A *pa; // { dg-warning "redundant class-key 'struct' in reference to 'struct A'" } extern A aa[]; extern struct A aa[]; // { dg-warning "redundant class-key 'struct' in reference to 'struct A'" } void func (A*); void func (struct A*); // { dg-warning "redundant class-key 'struct' in reference to 'struct A'" } int A; extern struct A *pa; extern struct A aa[]; void func (struct A*); class B; extern B *pb; extern class B *pb; // { dg-warning "redundant class-key 'class' in reference to 'class B'" } extern B ab[]; extern class B ab[]; // { dg-warning "redundant class-key 'class' in reference to 'class B'" } void func (B*); void func (class B*); // { dg-warning "redundant class-key 'class' in reference to 'class B'" } int B; extern class B *pb; extern class B ab[]; void func (class B*); enum C { c0 }; extern C *pc; extern enum C *pc; // { dg-warning "redundant enum-key 'enum' in reference to 'enum C'" } extern C ac[]; extern enum C ac[]; // { dg-warning "redundant enum-key 'enum' in reference to 'enum C'" } void func (C*); void func (enum C*); // { dg-warning "redundant enum-key 'enum' in reference to 'enum C'" } int C; extern enum C *pc; extern enum C ac[]; void func (enum C*); #if __cplusplus > 199711L enum class D1 { d1 }; enum struct D2 { d2 }; #else enum D1 { d1 }; enum D2 { d2 }; #endif extern D1 *pd1; extern D2 *pd2; extern enum D1 *pd1; // { dg-warning "redundant enum-key 'enum' in reference to 'enum class D1'" "C++ 11 and above" { target c++11 } } // { dg-warning "redundant enum-key 'enum' in reference to 'enum D1'" "C++ 98" { target c++98_only } .-1 } extern enum D2 *pd2; // { dg-warning "redundant enum-key 'enum' in reference to 'enum class D2'" "C++ 11 and above" { target c++11 } } // { dg-warning "redundant enum-key 'enum' in reference to 'enum D2'" "C++ 98" { target c++98_only } .-1 } extern D1 ad1[]; extern D2 ad2[]; #if __cplusplus > 199711L extern enum class D1 ad1[]; // { dg-warning "redundant enum-key 'enum class' in reference to 'enum class D1'" "C++ 11 and above" { target c++11 } } // { dg-warning "elaborated-type-specifier for a scoped enum must not use the 'class' keyword" "C++ 11 and above" { target c++11 } .-1 } /* The pretty printer cannot differentiate between enum class and enum struct because the C++ front-end doesn't encode it so allow for both in the text of the warning below. */ extern enum struct D2 ad2[]; // { dg-warning "redundant enum-key 'enum struct' in reference to 'enum \(class|struct\) D2'" "C++ 11 and above" { target c++11 } } // { dg-warning "elaborated-type-specifier for a scoped enum must not use the 'struct' keyword" "C++ 11 and above" { target c++11 } .-1 } #else extern enum D1 ad1[]; // { dg-warning "redundant enum-key 'enum' in reference to 'enum D1'" "C++ 98" { target c++98_only } } #endif void func (D1*); void func (enum D1*); // { dg-warning "redundant enum-key 'enum' in reference to 'enum " } void func (D2*); void func (enum D2*); // { dg-warning "redundant enum-key 'enum' in reference to 'enum " } int D1, D2; extern enum D1 *pd1; extern enum D1 ad1[]; void func (enum D1*); extern enum D2 *pd2; extern enum D2 ad2[]; void func (enum D2*); union U; extern U *pu; extern union U *pu; // { dg-warning "redundant class-key 'union' in reference to 'union U'" } extern U au[]; extern union U au[]; // { dg-warning "redundant class-key 'union' in reference to 'union U'" } void func (U*); void func (union U*); // { dg-warning "redundant class-key 'union' in reference to 'union U'" } int U; extern union U *pu; extern union U au[]; void func (union U*);