Eli Friedman | eca3ed7 | 2011-06-13 23:56:42 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
Eli Friedman | 85a5319 | 2009-04-07 19:37:57 +0000 | [diff] [blame] | 2 | |
| 3 | // Check that we don't allow illegal uses of inline |
| 4 | inline int a; // expected-error{{'inline' can only appear on functions}} |
| 5 | typedef inline int b; // expected-error{{'inline' can only appear on functions}} |
| 6 | int d(inline int a); // expected-error{{'inline' can only appear on functions}} |
Jordan Rose | 106af9e | 2012-06-15 18:19:48 +0000 | [diff] [blame] | 7 | |
| 8 | |
| 9 | // Check the use of static variables in non-static inline functions. |
| 10 | static int staticVar; // expected-note 2 {{'staticVar' declared here}} |
| 11 | static int staticFunction(); // expected-note 2 {{'staticFunction' declared here}} |
| 12 | |
| 13 | inline int useStatic () { // expected-note 2 {{use 'static' to give inline function 'useStatic' internal linkage}} |
| 14 | staticFunction(); // expected-warning{{function 'staticFunction' has internal linkage but is used in an inline function with external linkage}} |
| 15 | return staticVar; // expected-warning{{variable 'staticVar' has internal linkage but is used in an inline function with external linkage}} |
| 16 | } |
| 17 | |
| 18 | extern inline int useStaticFromExtern () { // no suggestions |
| 19 | staticFunction(); // expected-warning{{function 'staticFunction' has internal linkage but is used in an inline function with external linkage}} |
| 20 | return staticVar; // expected-warning{{variable 'staticVar' has internal linkage but is used in an inline function with external linkage}} |
| 21 | } |
| 22 | |
| 23 | static inline int useStaticFromStatic () { |
| 24 | staticFunction(); // no-warning |
| 25 | return staticVar; // no-warning |
| 26 | } |