1 | // RUN: %clang_cc1 -fsyntax-only -verify -ftemplate-depth 5 -ftemplate-backtrace-limit 4 %s |
2 | // RUN: %clang -fsyntax-only -Xclang -verify -ftemplate-depth-5 -ftemplate-backtrace-limit=4 %s |
3 | // RUN: %clang -fsyntax-only -Xclang -verify -ftemplate-depth=5 -ftemplate-backtrace-limit=4 %s |
4 | |
5 | #ifndef NOEXCEPT |
6 | |
7 | template<typename T> struct X : X<T*> { }; \ |
8 | // expected-error{{recursive template instantiation exceeded maximum depth of 5}} \ |
9 | // expected-note 3 {{instantiation of template class}} \ |
10 | // expected-note {{skipping 2 contexts in backtrace}} \ |
11 | // expected-note {{use -ftemplate-depth=N to increase recursive template instantiation depth}} |
12 | |
13 | void test() { |
14 | (void)sizeof(X<int>); // expected-note {{instantiation of template class}} |
15 | } |
16 | |
17 | #else |
18 | |
19 | // RUN: %clang_cc1 -fsyntax-only -verify -ftemplate-depth 5 -ftemplate-backtrace-limit 4 -std=c++11 -DNOEXCEPT %s |
20 | |
21 | template<typename T> struct S { |
22 | S() noexcept(noexcept(S<S>())); \ |
23 | // expected-error{{recursive template instantiation exceeded maximum depth of 5}} \ |
24 | // expected-note 3 {{in instantiation of exception spec}} \ |
25 | // expected-note {{skipping 2 contexts in backtrace}} \ |
26 | // expected-note {{use -ftemplate-depth=N to increase recursive template instantiation depth}} |
27 | }; |
28 | S<void> t; // expected-note {{in instantiation of exception spec}} |
29 | |
30 | #endif |
31 | |