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