1 // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks -fdeclspec -ftrivial-auto-var-init=zero %s -emit-llvm -o - | FileCheck %s
6 union U
{ char c
; int i
; };
8 struct __declspec(no_init_all
) NoInitS
{ char c
; };
9 class __declspec(no_init_all
) NoInitC
{ char c
; };
10 enum class __declspec(no_init_all
) NoInitE
{ ZERO
};
11 union __declspec(no_init_all
) NoInitU
{ char c
; int i
; };
15 // CHECK-LABEL: @test_no_attr()
17 // CHECK-NEXT: %s = alloca %struct.S, align 1
18 // CHECK-NEXT: %c = alloca %class.C, align 1
19 // CHECK-NEXT: %e = alloca i32, align 4
20 // CHECK-NEXT: %u = alloca %union.U, align 4
21 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 %s, i8 0, i64 1, i1 false)
22 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 %c, i8 0, i64 1, i1 false)
23 // CHECK-NEXT: store i32 0, ptr %e, align 4
24 // CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 4 %u, i8 0, i64 4, i1 false)
25 // CHECK-NEXT ret void
32 void __declspec(no_init_all
) test_attr_on_function() {
33 // CHECK-LABEL: @test_attr_on_function()
35 // CHECK-NEXT: %s = alloca %struct.S, align 1
36 // CHECK-NEXT: %c = alloca %class.C, align 1
37 // CHECK-NEXT: %e = alloca i32, align 4
38 // CHECK-NEXT: %u = alloca %union.U, align 4
39 // CHECK-NEXT: ret void
46 void test_attr_on_decl() {
47 // CHECK-LABEL: @test_attr_on_decl()
49 // CHECK-NEXT: %s = alloca %struct.NoInitS, align 1
50 // CHECK-NEXT: %c = alloca %class.NoInitC, align 1
51 // CHECK-NEXT: %e = alloca i32, align 4
52 // CHECK-NEXT: %u = alloca %union.NoInitU, align 4
53 // CHECK-NEXT: ret void