blob: 5e1d2b3eeee8505ad2b9a6cb1b2fcc9f1ec5a247 [file]
// RUN: %clang_cc1 -verify=ms-ext -fms-extensions -fsyntax-only -std=c++23 %s
// RUN: %clang_cc1 -verify=no-ms-ext -fsyntax-only -std=c++23 %s
void foo();
[[msvc::forceinline]] void func() {}
// no-ms-ext-warning@-1 {{'msvc::forceinline' attribute ignored}}
void lambda_func() {
auto l = [] [[msvc::forceinline]] () {};
// no-ms-ext-warning@-1 {{'msvc::forceinline' attribute ignored}}
l();
}
void stmt_forceinline() {
[[msvc::forceinline]] func();
// ms-ext-warning@-1 {{attribute is ignored on this statement as it only applies to functions; use '[[msvc::forceinline_calls]]' on statements}}
// no-ms-ext-warning@-2 {{'msvc::forceinline' attribute ignored}}
}
[[msvc::forceinline_calls]] void func2() {}
// ms-ext-warning@-1 {{attribute is ignored on this function as it only applies to statements; use '[[msvc::forceinline]]' for functions}}
// no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}}
void stmt_forceinline_calls() {
[[msvc::forceinline_calls]] foo();
// no-ms-ext-warning@-1 {{'msvc::forceinline_calls' attribute ignored}}
}
[[msvc::forceinline(0)]] void func3();
// ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}}
// no-ms-ext-error@-2 {{'msvc::forceinline' attribute takes no arguments}}
void func4() {
[[msvc::forceinline_calls("foo")]] foo();
// ms-ext-error@-1 {{'msvc::forceinline_calls' attribute takes no arguments}}
// no-ms-ext-error@-2 {{'msvc::forceinline_calls' attribute takes no arguments}}
}