[clang] 86f9cf8 - [clang] Add tests for (const) weak variables
Anders Waldenborg via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 1 11:21:21 PDT 2022
Author: Anders Waldenborg
Date: 2022-06-01T20:18:54+02:00
New Revision: 86f9cf88cb06d36e37ef8de006b2a0b651c9b7e9
URL: https://github.com/llvm/llvm-project/commit/86f9cf88cb06d36e37ef8de006b2a0b651c9b7e9
DIFF: https://github.com/llvm/llvm-project/commit/86f9cf88cb06d36e37ef8de006b2a0b651c9b7e9.diff
LOG: [clang] Add tests for (const) weak variables
This adds tests checking the behavior of const variables declared with
weak attribute.
Both checking that they can not be used in places where a constant
expression is required and that a dynamic initializer is emitted when
used as an initializer expression.
Differential Revision: https://reviews.llvm.org/D126578
Added:
clang/test/CodeGenCXX/weak-init.cpp
clang/test/SemaCXX/weak-init.cpp
Modified:
Removed:
################################################################################
diff --git a/clang/test/CodeGenCXX/weak-init.cpp b/clang/test/CodeGenCXX/weak-init.cpp
new file mode 100644
index 0000000000000..634021f38f854
--- /dev/null
+++ b/clang/test/CodeGenCXX/weak-init.cpp
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s
+
+extern const int W __attribute__((weak)) = 99;
+const int S = 77;
+
+// CHECK: @C1 = {{.*}} 77
+extern const int C1 = S;
+
+// CHECK: %0 = load {{.*}} @W
+// CHECK-NEXT: store {{.*}} %0, {{.*}} @C2
+extern const int C2 = W;
diff --git a/clang/test/SemaCXX/weak-init.cpp b/clang/test/SemaCXX/weak-init.cpp
new file mode 100644
index 0000000000000..c040330bb274a
--- /dev/null
+++ b/clang/test/SemaCXX/weak-init.cpp
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 %s -verify -fsyntax-only
+
+extern const int W1 __attribute__((weak)) = 10; // expected-note {{declared here}}
+
+static_assert(W1 == 10, ""); // expected-error {{static_assert expression is not an integral constant expression}}
+ // expected-note at -1 {{initializer of weak variable 'W1' is not considered constant because it may be
diff erent at runtime}}
+
+extern const int W2 __attribute__((weak)) = 20;
+
+int S2[W2]; // expected-error {{variable length array declaration not allowed at file scope}}
+
+extern const int W3 __attribute__((weak)) = 30; // expected-note {{declared here}}
+
+constexpr int S3 = W3; // expected-error {{constexpr variable 'S3' must be initialized by a constant expression}}
+ // expected-note at -1 {{initializer of weak variable 'W3' is not considered constant because it may be
diff erent at runtime}}
More information about the cfe-commits
mailing list