forked from OSchip/llvm-project
[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
This commit is contained in:
parent
548f0841cd
commit
86f9cf88cb
|
@ -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;
|
|
@ -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@-1 {{initializer of weak variable 'W1' is not considered constant because it may be different 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@-1 {{initializer of weak variable 'W3' is not considered constant because it may be different at runtime}}
|
Loading…
Reference in New Issue