| 1 | // RUN: %clang_cc1 -emit-llvm-only -x c++ -std=c++11 -triple %itanium_abi_triple -verify %s -DN=1 |
| 2 | // RUN: %clang_cc1 -emit-llvm-only -x c++ -std=c++11 -triple %itanium_abi_triple -verify %s -DN=2 |
| 3 | |
| 4 | struct A { int a; }; |
| 5 | |
| 6 | #if N == 1 |
| 7 | // ChooseExpr |
| 8 | template<class T> void test(int (&)[sizeof(__builtin_choose_expr(true, 1, 1), T())]) {} // expected-error {{cannot yet mangle}} |
| 9 | template void test<int>(int (&)[sizeof(int)]); |
| 10 | |
| 11 | #elif N == 2 |
| 12 | // CompoundLiteralExpr |
| 13 | template<class T> void test(int (&)[sizeof((A){}, T())]) {} // expected-error {{cannot yet mangle}} |
| 14 | template void test<int>(int (&)[sizeof(A)]); |
| 15 | |
| 16 | // FIXME: There are several more cases we can't yet mangle. |
| 17 | |
| 18 | #else |
| 19 | #error unknown N |
| 20 | #endif |
| 21 | |