// RUN: %clang_cc1 -no-opaque-pointers -std=c++11 -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s
;
;
// CHECK: @.compoundliteral = internal global [5 x i32] [i32 1, i32 2, i32 3, i32 4, i32 5], align 4
// CHECK: @q ={{.*}} global i32* getelementptr inbounds ([5 x i32], [5 x i32]* @.compoundliteral, i32 0, i32 0), align 4
// CHECK-LABEL: define{{.*}} i32 @_Z1fv()
int
// CHECK-LABEL: define{{.*}} i32 @_Z1gv()
int
// GCC's compound-literals-in-C++ extension lifetime-extends a compound literal
// (or a C++11 list-initialized temporary!) if:
// - it is at global scope
// - it has array type
// - it has a constant initializer
;
int *p = .i;
// CHECK: define {{.*}}__cxx_global_var_init()
// CHECK: alloca %struct.Z
// CHECK: store i32* %{{.*}}, i32** @p
int *q = ;
// (constant initialization, checked above)
extern int n;
int *r = + n;
// CHECK-LABEL: define {{.*}}__cxx_global_var_init.1()
// CHECK: %[[PTR:.*]] = getelementptr inbounds i32, i32* getelementptr inbounds ([5 x i32], [5 x i32]* @.compoundliteral.2, i32 0, i32 0), i32 %
// CHECK: store i32* %[[PTR]], i32** @r
int *PR21912_1 = + n;
// CHECK-LABEL: define {{.*}}__cxx_global_var_init.3()
// CHECK: %[[PTR:.*]] = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @.compoundliteral.4, i32 0, i32 0), i32 %
// CHECK: store i32* %[[PTR]], i32** @PR21912_1
;
union PR21912Ty *PR21912_2 = + n;
// CHECK-LABEL: define {{.*}}__cxx_global_var_init.5()
// CHECK: %[[PTR:.*]] = getelementptr inbounds %union.PR21912Ty, %union.PR21912Ty* getelementptr inbounds ([2 x %union.PR21912Ty], [2 x %union.PR21912Ty]* bitcast (<{ { double }, %union.PR21912Ty }>* @.compoundliteral.6 to [2 x %union.PR21912Ty]*), i32 0, i32 0), i32 %
// CHECK: store %union.PR21912Ty* %[[PTR]], %union.PR21912Ty** @PR21912_2, align 4
// This compound literal should have local scope.
int computed_with_lambda = ;
// CHECK-LABEL: define internal noundef i32 @{{.*}}clEv
// CHECK: alloca [4 x i32]