diff options
| author | John McCall <rjmccall@apple.com> | 2011-02-08 22:35:49 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2011-02-08 22:35:49 +0000 |
| commit | 7a198cef046f37cd9732eef3f6e976dc9021d5a1 (patch) | |
| tree | b5987c29d9d9fd3ada6f07a0bb172c7302f406b3 /clang/test/SemaCXX/attr-weak.cpp | |
| parent | 701f094afb93444a8f71f720390b8cca56ad82e6 (diff) | |
| download | bcm5719-llvm-7a198cef046f37cd9732eef3f6e976dc9021d5a1.tar.gz bcm5719-llvm-7a198cef046f37cd9732eef3f6e976dc9021d5a1.zip | |
When checking the 'weak' and 'weakref' attributes, look for non-external
linkage rather than the presence of the 'static' storage class specifier.
Fixes rdar://problem/8814626.
llvm-svn: 125126
Diffstat (limited to 'clang/test/SemaCXX/attr-weak.cpp')
| -rw-r--r-- | clang/test/SemaCXX/attr-weak.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
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>; |

