From 332bb2a2e3cd0a5af85758847a8050ae8ceee5f3 Mon Sep 17 00:00:00 2001 From: John McCall Date: Tue, 8 Feb 2011 22:35:49 +0000 Subject: 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 --- test/SemaCXX/attr-weak.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/SemaCXX/attr-weak.cpp (limited to 'test/SemaCXX/attr-weak.cpp') 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 struct Test7 { + void test7() __attribute__((weak)) {} +}; +namespace { class Internal; } +template struct Test7; +template struct Test7; -- cgit v1.2.3-18-g5258