| // 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}} |
| } |