1 // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++20 %s -emit-llvm -o - | FileCheck %s
2 // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++20 %s -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s
4 struct S
{ char buf
[32]; };
5 template<S s
> constexpr const char* f() { return s
.buf
; }
6 const char* fbuf
= f
<S
{"a"}>();
7 // CHECK: @_ZTAXtl1StlA32_cLc97EEEE = linkonce_odr constant { <{ i8, [31 x i8] }> }
10 struct UN
{ char buf
[64]; };
12 template <UN un
> constexpr const char* g() { return un
.buf
; }
13 const char* gbuf
= g
<UN
{"b"}>();
14 // CHECK: @_ZTAXtlN12_GLOBAL__N_12UNEtlA64_cLc98EEEE = internal constant { <{ i8, [63 x i8] }> }
16 struct Foo
{ int *i
; };
21 const int* h() { return foo
.i
; }
23 const int* hm
= h
<Foo
{&m
}>();
24 // CHECK: @_ZTAXtl3FooadL_Z1mEEE = linkonce_odr constant %struct.Foo { ptr @m }
26 const int* hn
= h
<Foo
{&n
}>();
27 // CHECK: @_ZTAXtl3FooadL_ZN12_GLOBAL__N_11nEEEE = internal constant %struct.Foo { ptr @_ZN12_GLOBAL__N_11nE }