Fix test-suite fallout of default -Wreturn-type.
[official-gcc.git] / gcc / testsuite / g++.dg / warn / Wcatch-value-3.C
blob88ae698caf62e1d411364b0f7c82eb011fe1e977
1 // { dg-options "-Wcatch-value=3" }
3 struct A { virtual ~A() {} };
4 struct B : A {};
5 struct C {};
6 struct D : C {};
8 void foo()
10   try {}
11   catch (D)    {}  // { dg-warning "catching type" }
12   catch (C)    {}  // { dg-warning "catching type" }
13   catch (B)    {}  // { dg-warning "catching polymorphic type" }
14   catch (A)    {}  // { dg-warning "catching polymorphic type" }
15   catch (A*)   {}  // { dg-warning "catching non-reference type" }
16   catch (int)  {}  // { dg-warning "catching non-reference type" }
18   try {}
19   catch (D&)   {}
20   catch (C&)   {}
21   catch (B&)   {}
22   catch (A&)   {}
23   catch (A*)   {}  // { dg-warning "catching non-reference type" }
24   catch (int&) {}
27 template<typename T> void foo1()
29   try {}
30   catch (T) {}  // { dg-warning "catching" }
33 template<typename T> void foo2()
35   try {}
36   catch (T*) {}  // { dg-warning "catching non-reference type" }
38   try {}
39   catch (T&) {}
41   try {}
42   catch (const T&) {}
45 void bar()
47   foo1<int&>();
48   foo1<const A&>();
49   foo1<B&>();
50   foo1<const C&>();
51   foo1<D&>();
53   foo1<int>();  // { dg-message "required" }
54   foo1<A>();    // { dg-message "required" }
55   foo1<B>();    // { dg-message "required" }
56   foo1<C>();    // { dg-message "required" }
57   foo1<D>();    // { dg-message "required" }
59   foo2<int>();  // { dg-message "required" }
60   foo2<A>();    // { dg-message "required" }
61   foo2<B>();    // { dg-message "required" }
62   foo2<C>();    // { dg-message "required" }
63   foo2<D>();    // { dg-message "required" }