aboutsummaryrefslogtreecommitdiff
path: root/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
commit332bb2a2e3cd0a5af85758847a8050ae8ceee5f3 (patch)
tree8ee44ee669f5350c81c3b77244dd7b8bceba4a99 /test/SemaCXX/attr-weak.cpp
parentb19c76e857d21b722d0a207cb45b26d7cb20a73f (diff)
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125126 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/attr-weak.cpp')
-rw-r--r--test/SemaCXX/attr-weak.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/SemaCXX/attr-weak.cpp b/test/SemaCXX/attr-weak.cpp
new file mode 100644
index 0000000000..b6a9e0aa84
--- /dev/null
+++ b/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>;