// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++23 %s -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 %s -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++17 %s -emit-llvm -o - | FileCheck %s extern int& s; // CHECK-LABEL: @_Z4testv() // CHECK-NEXT: entry: // CHECK-NEXT: [[I:%.*]] = alloca ptr, align {{.*}} // CHECK-NEXT: [[X:%.*]] = load ptr, ptr @s, align {{.*}} // CHECK-NEXT: store ptr [[X]], ptr [[I]], align {{.*}} int& test() { auto &i = s; return i; } // CHECK-LABEL: @_Z1fv( // CHECK: [[X1:%.*]] = load ptr, ptr @x, align {{.*}} // CHECK-NEXT: store ptr [[X1]] // CHECK: [[X2:%.*]] = load ptr, ptr @x, align {{.*}} // CHECK-NEXT: store ptr [[X2]] // CHECK: [[X3:%.*]] = load ptr, ptr @x, align {{.*}} // CHECK-NEXT: store ptr [[X3]] int &ff(); int &x = ff(); struct A { int& x; }; struct B { A x[20]; }; B f() { return {x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x}; }