inline.c revision 106af9e86adbbb3a05f2c339d509fcd3b4274504
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3// Check that we don't allow illegal uses of inline 4inline int a; // expected-error{{'inline' can only appear on functions}} 5typedef inline int b; // expected-error{{'inline' can only appear on functions}} 6int d(inline int a); // expected-error{{'inline' can only appear on functions}} 7 8 9// Check the use of static variables in non-static inline functions. 10static int staticVar; // expected-note 2 {{'staticVar' declared here}} 11static int staticFunction(); // expected-note 2 {{'staticFunction' declared here}} 12 13inline 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 18extern 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 23static inline int useStaticFromStatic () { 24 staticFunction(); // no-warning 25 return staticVar; // no-warning 26} 27