// RUN: %clang_cc1 -verify -fsyntax-only %s
intbar();[[gnu::always_inline]]voidalways_inline_fn(void){}[[gnu::flatten]]voidflatten_fn(void){}[[gnu::noinline]]voidnoinline_fn(void){}voidfoo(){[[clang::noinline]]bar();[[clang::noinline(0)]]bar();// expected-error {{'noinline' attribute takes no arguments}}
int x;[[clang::noinline]] x =0;// expected-warning {{'noinline' attribute is ignored because there exists no call expression inside the statement}}
[[clang::noinline]]{asm("nop");}// expected-warning {{'noinline' attribute is ignored because there exists no call expression inside the statement}}
[[clang::noinline]] label: x =1;// expected-warning {{'noinline' attribute only applies to functions and statements}}
[[clang::noinline]]always_inline_fn();// expected-warning {{statement attribute 'noinline' has higher precedence than function attribute 'always_inline'}}
[[clang::noinline]]flatten_fn();// expected-warning {{statement attribute 'noinline' has higher precedence than function attribute 'flatten'}}
[[clang::noinline]]noinline_fn();[[gnu::noinline]]bar();// expected-warning {{attribute is ignored on this statement as it only applies to functions; use '[[clang::noinline]]' on statements}}
__attribute__((noinline))bar();// expected-warning {{attribute is ignored on this statement as it only applies to functions; use '[[clang::noinline]]' on statements}}
}[[clang::noinline]]staticint i =bar();// expected-warning {{'noinline' attribute only applies to functions and statements}}