1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | // expected-no-diagnostics |
3 | |
4 | // PR5426 - the non-dependent obj would be fully processed and wrapped in a |
5 | // CXXConstructExpr at definition time, which would lead to a failure at |
6 | // instantiation time. |
7 | struct arg { |
8 | arg(); |
9 | }; |
10 | |
11 | struct oldstylemove { |
12 | oldstylemove(oldstylemove&); |
13 | oldstylemove(const arg&); |
14 | }; |
15 | |
16 | template <typename T> |
17 | void fn(T t, const arg& arg) { |
18 | oldstylemove obj(arg); |
19 | } |
20 | |
21 | void test() { |
22 | fn(1, arg()); |
23 | } |
24 | |
25 | struct X0 { }; |
26 | |
27 | struct X1 { |
28 | explicit X1(const X0 &x0 = X0()); |
29 | }; |
30 | |
31 | template<typename T> |
32 | void f0() { |
33 | X1 x1; |
34 | } |
35 | |
36 | template void f0<int>(); |
37 | template void f0<float>(); |
38 | |
39 | struct NonTrivial { |
40 | NonTrivial(); |
41 | ~NonTrivial(); |
42 | }; |
43 | |
44 | template<int N> void f1() { |
45 | NonTrivial array[N]; |
46 | } |
47 | template<> void f1<2>(); |
48 | |
49 | namespace PR20346 { |
50 | struct S { short inner_s; }; |
51 | |
52 | struct outer_struct { |
53 | wchar_t arr[32]; |
54 | S outer_s; |
55 | }; |
56 | |
57 | template <class T> |
58 | void OpenFileSession() { |
59 | // Ensure that we don't think the ImplicitValueInitExpr generated here |
60 | // during the initial parse only initializes the first array element! |
61 | outer_struct asdfasdf = {}; |
62 | }; |
63 | |
64 | void foo() { |
65 | OpenFileSession<int>(); |
66 | } |
67 | } |
68 | |