blob: 61272b1ceea2cae1790e0a8e3b1efeb316069f72 [file] [log] [blame]
Roman Lebedev7d274142018-08-01 21:20:58 +00001// RUN: %clang_cc1 %s -emit-llvm-only -o -
Roman Lebedev4aaf1dc2018-08-01 06:06:16 +00002
3// https://bugs.llvm.org/show_bug.cgi?id=38356
4// We only check that we do not crash.
5
Volodymyr Sapsai536a5c42018-11-06 02:16:28 +00006// ASAN increases stack usage, so we are hitting stack overflow before reaching
7// recursive template instantiation limit.
8// XFAIL: darwin && asan
9
Roman Lebedev4aaf1dc2018-08-01 06:06:16 +000010template <typename a, a b(unsigned), int c, unsigned...>
11struct d : d<a, b, c - 1> {};
12template <typename a, a b(unsigned), unsigned... e>
13struct d<a, b, 0, e...> {
14 a f[0];
15};
16struct g {
17 static g h(unsigned);
18};
19struct i {
20 void j() const;
21 // Current maximum depth of recursive template instantiation is 1024,
22 // thus, this \/ threshold value is used here. BasePathSize in CastExpr might
23 // not fit it, so we are testing that we do fit it.
24 // If -ftemplate-depth= is provided, larger values (4096 and up) cause crashes
25 // elsewhere.
26 d<g, g::h, (1U << 10U) - 2U> f;
27};
28void i::j() const {
29 const void *k{f.f};
30 (void)k;
31}