diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Sema/attr-weak.c | 3 | ||||
| -rw-r--r-- | clang/test/SemaCXX/attr-weak.cpp | 29 | ||||
| -rw-r--r-- | clang/test/SemaCXX/attr-weakref.cpp | 6 |
3 files changed, 33 insertions, 5 deletions
diff --git a/clang/test/Sema/attr-weak.c b/clang/test/Sema/attr-weak.c index 2abe0682df9..41c9fd7165a 100644 --- a/clang/test/Sema/attr-weak.c +++ b/clang/test/Sema/attr-weak.c @@ -11,5 +11,4 @@ void __attribute__((weak_import)) g5(void) { struct __attribute__((weak)) s0 {}; // expected-warning {{'weak' attribute only applies to variables and functions}} struct __attribute__((weak_import)) s1 {}; // expected-warning {{'weak_import' attribute only applies to variables and functions}} -static int x __attribute__((weak)); // expected-error {{weak declaration of 'x' must be public}} - +static int x __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}} diff --git a/clang/test/SemaCXX/attr-weak.cpp b/clang/test/SemaCXX/attr-weak.cpp new file mode 100644 index 00000000000..b6a9e0aa840 --- /dev/null +++ b/clang/test/SemaCXX/attr-weak.cpp @@ -0,0 +1,29 @@ +// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fsyntax-only -verify %s + +static int test0 __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}} +static void test1() __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}} + +namespace test2 __attribute__((weak)) { // expected-warning {{'weak' attribute only applies to variables and functions}} +} + +namespace { + int test3 __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}} + void test4() __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}} +} + +struct Test5 { + static void test5() __attribute__((weak)); // no error +}; + +namespace { + struct Test6 { + static void test6() __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}} + }; +} + +template <class T> struct Test7 { + void test7() __attribute__((weak)) {} +}; +namespace { class Internal; } +template struct Test7<Internal>; +template struct Test7<int>; diff --git a/clang/test/SemaCXX/attr-weakref.cpp b/clang/test/SemaCXX/attr-weakref.cpp index 11368d9399e..a34579198fe 100644 --- a/clang/test/SemaCXX/attr-weakref.cpp +++ b/clang/test/SemaCXX/attr-weakref.cpp @@ -24,8 +24,8 @@ class c { static int a __attribute__((weakref ("v2"))); // expected-error {{declaration of 'a' must be in a global context}} static int b() __attribute__((weakref ("f3"))); // expected-error {{declaration of 'b' must be in a global context}} }; -int a7() __attribute__((weakref ("f1"))); // expected-error {{declaration of 'a7' must be static}} -int a8 __attribute__((weakref ("v1"))); // expected-error {{declaration of 'a8' must be static}} +int a7() __attribute__((weakref ("f1"))); // expected-error {{weakref declaration must have internal linkage}} +int a8 __attribute__((weakref ("v1"))); // expected-error {{weakref declaration must have internal linkage}} // gcc accepts this -int a9 __attribute__((weakref)); // expected-error {{declaration of 'a9' must be static}} +int a9 __attribute__((weakref)); // expected-error {{weakref declaration must have internal linkage}} |

