blob: 2d5f2e4c34ff636fced2a297000f3da3c4b3abc0 [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
Erik Pilkington6c7687e2019-08-28 22:38:36 +00006// This test can exceed stack usage in some configurations, so unless we can
7// properly handle that don't run it.
8// REQUIRES: thread_support
Volodymyr Sapsai536a5c42018-11-06 02:16:28 +00009
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}