• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++11 -fsyntax-only -verify %s
2 class X {
3   X(const X&);
4 
5 public:
6   X();
7   X(X&&);
8 };
9 
return_by_move(int i,X x)10 X return_by_move(int i, X x) {
11   X x2;
12   if (i == 0)
13     return x;
14   else if (i == 1)
15     return x2;
16   else
17     return x;
18 }
19 
throw_move_only(X x)20 void throw_move_only(X x) {
21   X x2;
22   throw x;
23   throw x2;
24 }
25 
26 namespace PR10142 {
27   struct X {
28     X();
29     X(X&&);
30     X(const X&) = delete; // expected-note 2{{function has been explicitly marked deleted here}}
31   };
32 
f(int i)33   void f(int i) {
34     X x;
35     try {
36       X x2;
37       if (i)
38         throw x2; // okay
39       throw x; // expected-error{{call to deleted constructor of 'PR10142::X'}}
40     } catch (...) {
41     }
42   }
43 
44   template<typename T>
f2(int i)45   void f2(int i) {
46     T x;
47     try {
48       T x2;
49       if (i)
50         throw x2; // okay
51       throw x; // expected-error{{call to deleted constructor of 'PR10142::X'}}
52     } catch (...) {
53     }
54   }
55 
56   template void f2<X>(int); // expected-note{{in instantiation of function template specialization 'PR10142::f2<PR10142::X>' requested here}}
57 }
58