brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 5481c6e Raw
59 lines · cpp
1// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -fblocks -fdeclspec -ftrivial-auto-var-init=zero %s -emit-llvm -o - | FileCheck %s2 3struct S { char c; };4class C { char c; };5enum class E { ZERO };6union U { char c; int i; };7 8struct __declspec(no_init_all) NoInitS { char c; };9class __declspec(no_init_all) NoInitC { char c; };10enum class __declspec(no_init_all) NoInitE { ZERO };11union __declspec(no_init_all) NoInitU { char c; int i; };12 13extern "C" {14  void test_no_attr() {15    // CHECK-LABEL: @test_no_attr()16    // CHECK-NEXT:  entry:17    // CHECK-NEXT:  %s = alloca %struct.S, align 118    // CHECK-NEXT:  %c = alloca %class.C, align 119    // CHECK-NEXT:  %e = alloca i32, align 420    // CHECK-NEXT:  %u = alloca %union.U, align 421    // 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 424    // CHECK-NEXT:  call void @llvm.memset.p0.i64(ptr align 4 %u, i8 0, i64 4, i1 false)25    // CHECK-NEXT   ret void26    S s;27    C c;28    E e;29    U u;30  }31 32  void __declspec(no_init_all) test_attr_on_function() {33    // CHECK-LABEL: @test_attr_on_function()34    // CHECK-NEXT:  entry:35    // CHECK-NEXT:  %s = alloca %struct.S, align 136    // CHECK-NEXT:  %c = alloca %class.C, align 137    // CHECK-NEXT:  %e = alloca i32, align 438    // CHECK-NEXT:  %u = alloca %union.U, align 439    // CHECK-NEXT:  ret void40    S s;41    C c;42    E e;43    U u;44  }45 46  void test_attr_on_decl() {47    // CHECK-LABEL: @test_attr_on_decl()48    // CHECK-NEXT:  entry:49    // CHECK-NEXT:  %s = alloca %struct.NoInitS, align 150    // CHECK-NEXT:  %c = alloca %class.NoInitC, align 151    // CHECK-NEXT:  %e = alloca i32, align 452    // CHECK-NEXT:  %u = alloca %union.NoInitU, align 453    // CHECK-NEXT:  ret void54    NoInitS s;55    NoInitC c;56    NoInitE e;57    NoInitU u;58  }59}