42 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fblocks %s -emit-llvm -o - | FileCheck %s -check-prefix=UNINIT2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=pattern %s -emit-llvm -o - | FileCheck %s -check-prefix=PATTERN3// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fblocks -ftrivial-auto-var-init=zero %s -emit-llvm -o - | FileCheck %s -check-prefix=ZERO4 5template<typename T> void used(T &) noexcept;6 7extern "C" {8 9// UNINIT-LABEL: test_attribute_uninitialized(10// UNINIT: alloca11// UNINIT-NEXT: call void12// ZERO-LABEL: test_attribute_uninitialized(13// ZERO: alloca14// ZERO-NOT: !annotation15// ZERO-NEXT: call void16// PATTERN-LABEL: test_attribute_uninitialized(17// PATTERN: alloca18// PATTERN-NOT: !annotation19// PATTERN-NEXT: call void20void test_attribute_uninitialized() {21 [[clang::uninitialized]] int i;22 used(i);23}24 25#pragma clang attribute push([[clang::uninitialized]], apply_to = variable(is_local))26// UNINIT-LABEL: test_pragma_attribute_uninitialized(27// UNINIT: alloca28// UNINIT-NEXT: call void29// ZERO-LABEL: test_pragma_attribute_uninitialized(30// ZERO: alloca31// ZERO-NEXT: call void32// PATTERN-LABEL: test_pragma_attribute_uninitialized(33// PATTERN: alloca34// PATTERN-NEXT: call void35void test_pragma_attribute_uninitialized() {36 int i;37 used(i);38}39#pragma clang attribute pop40 41} // extern "C"42