1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -verify -fsyntax-only %s
26e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbar
36e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbarextern int g0 __attribute__((weak));
46e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbarextern int g1 __attribute__((weak_import));
56e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbarint g2 __attribute__((weak));
66e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbarint g3 __attribute__((weak_import)); // expected-warning {{'weak_import' attribute cannot be specified on a definition}}
76e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbarint __attribute__((weak_import)) g4(void);
8d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid __attribute__((weak_import)) g5(void) {
96e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbar}
106e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbar
11d6b8de0e7b01196bd2bee207feb81bc409a5baf9John McCallstruct __attribute__((weak)) s0 {}; // expected-warning {{'weak' attribute only applies to variables and functions}}
12d6b8de0e7b01196bd2bee207feb81bc409a5baf9John McCallstruct __attribute__((weak_import)) s1 {}; // expected-warning {{'weak_import' attribute only applies to variables and functions}}
136e775dbafba2ab6634decc489eb3b4301b4b506bDaniel Dunbar
14332bb2a2e3cd0a5af85758847a8050ae8ceee5f3John McCallstatic int x __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}}
15d543130a3009a350017e2e411ea43bb3e5459b96Fariborz Jahanian
16d543130a3009a350017e2e411ea43bb3e5459b96Fariborz Jahanian// rdar://9538608
17d543130a3009a350017e2e411ea43bb3e5459b96Fariborz Jahanianint C; // expected-note {{previous definition is here}}
18d543130a3009a350017e2e411ea43bb3e5459b96Fariborz Jahanianextern int C __attribute__((weak_import)); // expected-warning {{an already-declared variable is made a weak_import declaration}}
192a5bb509e2d33a0f7aa4bb0ba53c73b5dfdd6bb4Rafael Espindola
202a5bb509e2d33a0f7aa4bb0ba53c73b5dfdd6bb4Rafael Espindolastatic int pr14946_x;
212a5bb509e2d33a0f7aa4bb0ba53c73b5dfdd6bb4Rafael Espindolaextern int pr14946_x  __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}}
222a5bb509e2d33a0f7aa4bb0ba53c73b5dfdd6bb4Rafael Espindola
232a5bb509e2d33a0f7aa4bb0ba53c73b5dfdd6bb4Rafael Espindolastatic void pr14946_f();
242a5bb509e2d33a0f7aa4bb0ba53c73b5dfdd6bb4Rafael Espindolavoid pr14946_f() __attribute__((weak)); // expected-error {{weak declaration cannot have internal linkage}}
25