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