================
@@ -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(
----------------
jvoung wrote:
I'm not sure if a common "CHECK-LABEL:" would have the same semantics and help
split the stream for matching when there is a different prefix like "ZERO: "
(or "PATTERN:") that follows, or if the CHECK and the ZERO end up as a
independent scans. If it's an independent scan, then "CHECK-LABEL" wouldn't
have the same semantics as "ZERO-LABEL:" (which helps split the stream for the
"ZERO:" checks that follow -- e.g., in case there a multiple places that could
match something generic like "store i32 0, ", the preceding ZERO-LABEL help
disambiguate which to match).
I'd prefer to keep the redundancy just to be safe and more clear that the
X-LABEL are for the X that it's associated with, unless you're pretty sure it
can cross over different check prefixes.
https://github.com/llvm/llvm-project/pull/94642
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits