summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/attr-weak.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2011-02-08 22:35:49 +0000
committerJohn McCall <rjmccall@apple.com>2011-02-08 22:35:49 +0000
commit7a198cef046f37cd9732eef3f6e976dc9021d5a1 (patch)
treeb5987c29d9d9fd3ada6f07a0bb172c7302f406b3 /clang/test/SemaCXX/attr-weak.cpp
parent701f094afb93444a8f71f720390b8cca56ad82e6 (diff)
downloadbcm5719-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.cpp29
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>;
OpenPOWER on IntegriCloud