2017-06-14 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc.git] / gcc / testsuite / g++.dg / warn / Wcatch-value-1.C
blob94ee934b6aea085c1b7806e250db02159ccbea99
1 // { dg-options "-Wcatch-value=1" }
3 struct A { virtual ~A() {} };
4 struct B : A {};
5 struct C {};
6 struct D : C {};
8 void foo()
10   try {}
11   catch (D)    {}
12   catch (C)    {}
13   catch (B)    {}  // { dg-warning "catching polymorphic type" }
14   catch (A)    {}  // { dg-warning "catching polymorphic type" }
15   catch (A*)   {}
16   catch (int)  {}
18   try {}
19   catch (D&)   {}
20   catch (C&)   {}
21   catch (B&)   {}
22   catch (A&)   {}
23   catch (A*)   {}
24   catch (int&) {}
27 template<typename T> void foo1()
29   try {}
30   catch (T) {}  // { dg-warning "catching polymorphic type" }
33 template<typename T> void foo2()
35   try {}
36   catch (T*) {}
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>();
54   foo1<A>();  // { dg-message "required" }
55   foo1<B>();  // { dg-message "required" }
56   foo1<C>();
57   foo1<D>();
59   foo2<int>();
60   foo2<A>();
61   foo2<B>();
62   foo2<C>();
63   foo2<D>();