29 lines · cpp
1// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++23 %s -emit-llvm -o - | FileCheck %s2// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 %s -emit-llvm -o - | FileCheck %s3// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++17 %s -emit-llvm -o - | FileCheck %s4 5extern int& s;6 7// CHECK-LABEL: @_Z4testv()8// CHECK-NEXT: entry:9// CHECK-NEXT: [[I:%.*]] = alloca ptr, align {{.*}}10// CHECK-NEXT: [[X:%.*]] = load ptr, ptr @s, align {{.*}}11// CHECK-NEXT: store ptr [[X]], ptr [[I]], align {{.*}}12int& test() {13 auto &i = s;14 return i;15}16 17// CHECK-LABEL: @_Z1fv(18// CHECK: [[X1:%.*]] = load ptr, ptr @x, align {{.*}}19// CHECK-NEXT: store ptr [[X1]]20// CHECK: [[X2:%.*]] = load ptr, ptr @x, align {{.*}}21// CHECK-NEXT: store ptr [[X2]]22// CHECK: [[X3:%.*]] = load ptr, ptr @x, align {{.*}}23// CHECK-NEXT: store ptr [[X3]]24int &ff();25int &x = ff();26struct A { int& x; };27struct B { A x[20]; };28B f() { return {x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x}; }29