================ @@ -0,0 +1,110 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -emit-llvm -o - | FileCheck %s -check-prefix=UNINIT +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ftrivial-auto-var-init=pattern %s -emit-llvm -o - | FileCheck %s -check-prefix=PATTERN +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ftrivial-auto-var-init=zero %s -emit-llvm -o - | FileCheck %s -check-prefix=ZERO + +template<typename T> void used(T &) noexcept; + +extern "C" { + +extern int get_int(int) noexcept; +struct C { + int x; + int y; +}; +extern C make_c() noexcept; + +// Scalar with a self-reference: does need auto-init. +// UNINIT-LABEL: test_selfinit_call( +// ZERO-LABEL: test_selfinit_call( +// ZERO: store i32 0, ptr %self, align 4, !annotation [[AUTO_INIT:!.+]] +// PATTERN-LABEL: test_selfinit_call( +// PATTERN: store i32 -1431655766, ptr %self, align 4, !annotation [[AUTO_INIT:!.+]] +void test_selfinit_call() { + int self = get_int(self); + used(self); +} + +// Scalar without a self-reference: no auto-init needed. +// UNINIT-LABEL: test_nonself_call( +// ZERO-LABEL: test_nonself_call( +// ZERO-NOT: !annotation [[AUTO_INIT:!.+]] +// PATTERN-LABEL: test_nonself_call( +// PATTERN-NOT: !annotation [[AUTO_INIT:!.+]] +void test_nonself_call() { + int x = get_int(2); + used(x); +} + +// Scalar with a self-reference: does need auto-init. +// UNINIT-LABEL: test_selfinit_lambda_call( +// ZERO-LABEL: test_selfinit_lambda_call( ---------------- haopliu wrote:
Nit, if "UNINIT-LABEL", "ZERO-LABEL", and "PATTERN-LABEL" are always the same, just define a common label like "CHECK-LABEL:" to avoid redundancy? https://github.com/llvm/llvm-project/pull/94642 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits