annotate gcc/testsuite/g++.dg/warn/Wcatch-value-2.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-options "-Wcatch-value=2" }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 struct A { virtual ~A() {} };
kono
parents:
diff changeset
4 struct B : A {};
kono
parents:
diff changeset
5 struct C {};
kono
parents:
diff changeset
6 struct D : C {};
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 void foo()
kono
parents:
diff changeset
9 {
kono
parents:
diff changeset
10 try {}
kono
parents:
diff changeset
11 catch (D) {} // { dg-warning "catching type" }
kono
parents:
diff changeset
12 catch (C) {} // { dg-warning "catching type" }
kono
parents:
diff changeset
13 catch (B) {} // { dg-warning "catching polymorphic type" }
kono
parents:
diff changeset
14 catch (A) {} // { dg-warning "catching polymorphic type" }
kono
parents:
diff changeset
15 catch (A*) {}
kono
parents:
diff changeset
16 catch (int) {}
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 try {}
kono
parents:
diff changeset
19 catch (D&) {}
kono
parents:
diff changeset
20 catch (C&) {}
kono
parents:
diff changeset
21 catch (B&) {}
kono
parents:
diff changeset
22 catch (A&) {}
kono
parents:
diff changeset
23 catch (A*) {}
kono
parents:
diff changeset
24 catch (int&) {}
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 template<typename T> void foo1()
kono
parents:
diff changeset
28 {
kono
parents:
diff changeset
29 try {}
kono
parents:
diff changeset
30 catch (T) {} // { dg-warning "catching" }
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 template<typename T> void foo2()
kono
parents:
diff changeset
34 {
kono
parents:
diff changeset
35 try {}
kono
parents:
diff changeset
36 catch (T*) {}
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 try {}
kono
parents:
diff changeset
39 catch (T&) {}
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 try {}
kono
parents:
diff changeset
42 catch (const T&) {}
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 void bar()
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 foo1<int&>();
kono
parents:
diff changeset
48 foo1<const A&>();
kono
parents:
diff changeset
49 foo1<B&>();
kono
parents:
diff changeset
50 foo1<const C&>();
kono
parents:
diff changeset
51 foo1<D&>();
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 foo1<int>();
kono
parents:
diff changeset
54 foo1<A>(); // { dg-message "required" }
kono
parents:
diff changeset
55 foo1<B>(); // { dg-message "required" }
kono
parents:
diff changeset
56 foo1<C>(); // { dg-message "required" }
kono
parents:
diff changeset
57 foo1<D>(); // { dg-message "required" }
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 foo2<int>();
kono
parents:
diff changeset
60 foo2<A>();
kono
parents:
diff changeset
61 foo2<B>();
kono
parents:
diff changeset
62 foo2<C>();
kono
parents:
diff changeset
63 foo2<D>();
kono
parents:
diff changeset
64 }