https://github.com/trungnt2910 updated https://github.com/llvm/llvm-project/pull/185282
>From 825d065ef2d32e3374104b7b607abade434701a9 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <[email protected]> Date: Mon, 9 Mar 2026 01:28:03 +1100 Subject: [PATCH 1/6] [clang] Add support for `[[msvc::forceinline]]` This is equivalent to Microsoft's `__forceinline` when placed before a function declaration. Unlike `__forceinline`, `[[msvc::forceinline]]` works with lambdas. This is implemented as an alias of `[[clang::always_inline]]`. --- clang/include/clang/Basic/Attr.td | 3 ++- clang/test/CodeGen/attr-ms-forceinline.cpp | 16 ++++++++++++++++ clang/test/Sema/attr-ms-forceinline.cpp | 9 +++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGen/attr-ms-forceinline.cpp create mode 100644 clang/test/Sema/attr-ms-forceinline.cpp diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index befd671393c7c..446a5abc250e8 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -927,7 +927,8 @@ def AlignNatural : InheritableAttr { def AlwaysInline : DeclOrStmtAttr { let Spellings = [GCC<"always_inline">, CXX11<"clang", "always_inline">, - C23<"clang", "always_inline">, CustomKeyword<"__forceinline">]; + C23<"clang", "always_inline">, CustomKeyword<"__forceinline">, + CXX11<"msvc", "forceinline">, C23<"msvc", "forceinline">]; let Accessors = [Accessor<"isClangAlwaysInline", [CXX11<"clang", "always_inline">, C23<"clang", "always_inline">]>]; let Subjects = SubjectList<[Function, Stmt], WarnDiag, diff --git a/clang/test/CodeGen/attr-ms-forceinline.cpp b/clang/test/CodeGen/attr-ms-forceinline.cpp new file mode 100644 index 0000000000000..240e58b8a8e52 --- /dev/null +++ b/clang/test/CodeGen/attr-ms-forceinline.cpp @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-pc-windows-msvc -o - | FileCheck %s + +[[msvc::forceinline]] void func() {} + +void call_func() { +// CHECK-LABEL: @"?call_func@@YAXXZ"() +// CHECK-NOT: call void @"?func@@YAXXZ"() + func(); +} + +void call_lambda() { +// CHECK-LABEL: @"?call_lambda@@YAXXZ"() +// CHECK-NOT: call void @"??R<lambda_ + auto lambda = [] [[msvc::forceinline]] () {}; + lambda(); +} diff --git a/clang/test/Sema/attr-ms-forceinline.cpp b/clang/test/Sema/attr-ms-forceinline.cpp new file mode 100644 index 0000000000000..6e5ac191ce8d1 --- /dev/null +++ b/clang/test/Sema/attr-ms-forceinline.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -verify -fsyntax-only -std=c++23 -triple x86_64-windows %s +// expected-no-diagnostics + +[[msvc::forceinline]] void func(void) {} + +void lambda() { + auto l = [] [[msvc::forceinline]] () {}; + l(); +} >From 72a2f22ab2e02aaf034539343ca7d6a4ad458fd8 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <[email protected]> Date: Wed, 18 Mar 2026 07:21:16 +1100 Subject: [PATCH 2/6] [clang] Try removing triple from test --- clang/test/Sema/attr-ms-forceinline.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Sema/attr-ms-forceinline.cpp b/clang/test/Sema/attr-ms-forceinline.cpp index 6e5ac191ce8d1..619c7c8fb62da 100644 --- a/clang/test/Sema/attr-ms-forceinline.cpp +++ b/clang/test/Sema/attr-ms-forceinline.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -verify -fsyntax-only -std=c++23 -triple x86_64-windows %s +// RUN: %clang_cc1 -verify -fsyntax-only -std=c++23 %s // expected-no-diagnostics [[msvc::forceinline]] void func(void) {} >From b1d3deed72d24a44e8a864fd913499eee586334f Mon Sep 17 00:00:00 2001 From: Trung Nguyen <[email protected]> Date: Fri, 27 Mar 2026 23:31:42 +1100 Subject: [PATCH 3/6] Test [[msvc::forceinline]] with non-MSVC triple This ensures that the feature is not artificially restricted to the MSVC compatibility mode. --- clang/test/CodeGen/attr-ms-forceinline.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/clang/test/CodeGen/attr-ms-forceinline.cpp b/clang/test/CodeGen/attr-ms-forceinline.cpp index 240e58b8a8e52..580fea044a803 100644 --- a/clang/test/CodeGen/attr-ms-forceinline.cpp +++ b/clang/test/CodeGen/attr-ms-forceinline.cpp @@ -1,16 +1,21 @@ -// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-pc-windows-msvc -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-pc-windows-msvc -o - | FileCheck -check-prefix=CHECK-MSVC %s +// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-unknown-linux-gnu -o - | FileCheck -check-prefix=CHECK-LINUX %s [[msvc::forceinline]] void func() {} void call_func() { -// CHECK-LABEL: @"?call_func@@YAXXZ"() -// CHECK-NOT: call void @"?func@@YAXXZ"() +// CHECK-MSVC-LABEL: @"?call_func@@YAXXZ"() +// CHECK-MSVC-NOT: call void @"?func@@YAXXZ"() +// CHECK-LINUX-LABEL: @_Z9call_funcv() +// CHECK-LINUX-NOT: call void @_Z4funcv() func(); } void call_lambda() { -// CHECK-LABEL: @"?call_lambda@@YAXXZ"() -// CHECK-NOT: call void @"??R<lambda_ +// CHECK-MSVC-LABEL: @"?call_lambda@@YAXXZ"() +// CHECK-MSVC-NOT: call void @"??R<lambda_ +// CHECK-LINUX-LABEL: @_Z11call_lambdav() +// CHECK-LINUX-NOT: call void @"_ZZ11call_lambdavENK3$_0clEv" auto lambda = [] [[msvc::forceinline]] () {}; lambda(); } >From b4e09722a11c9b6c53dff529f38611cebf131fd0 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <[email protected]> Date: Tue, 31 Mar 2026 23:30:48 +1100 Subject: [PATCH 4/6] [clang] Address review feedback - Add tests for C23 and later attributes. They are identical to the C++ tests except for the lambda. - Added sema tests for: + Applying `[[msvc::forceinline]]` to a statement. + Applying `[[msvc::forceinline_calls]]` to a function. + Passing unwanted arguments to the attributes. + Using the attributes without enabling MS extensions (they are ignored). - Add support for `[[msvc::forceinline_calls]]`. - Guard the two attributes with `-fms-extensions`. --- clang/include/clang/Basic/Attr.td | 9 ++++- .../clang/Basic/DiagnosticSemaKinds.td | 5 +++ clang/lib/Sema/SemaDeclAttr.cpp | 12 ++++++ clang/lib/Sema/SemaStmtAttr.cpp | 12 +++++- clang/test/CodeGen/attr-ms-forceinline.cpp | 31 +++++++++++----- clang/test/Sema/attr-ms-forceinline.c | 32 ++++++++++++++++ clang/test/Sema/attr-ms-forceinline.cpp | 37 +++++++++++++++++-- 7 files changed, 122 insertions(+), 16 deletions(-) create mode 100644 clang/test/Sema/attr-ms-forceinline.c diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 446a5abc250e8..6a1c91c58ff29 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -928,9 +928,14 @@ def AlignNatural : InheritableAttr { def AlwaysInline : DeclOrStmtAttr { let Spellings = [GCC<"always_inline">, CXX11<"clang", "always_inline">, C23<"clang", "always_inline">, CustomKeyword<"__forceinline">, - CXX11<"msvc", "forceinline">, C23<"msvc", "forceinline">]; + CXX11<"msvc", "forceinline">, C23<"msvc", "forceinline">, + CXX11<"msvc", "forceinline_calls">, C23<"msvc", "forceinline_calls">]; let Accessors = [Accessor<"isClangAlwaysInline", [CXX11<"clang", "always_inline">, - C23<"clang", "always_inline">]>]; + C23<"clang", "always_inline">]>, + Accessor<"isMSVCForceInline", [CXX11<"msvc", "forceinline">, + C23<"msvc", "forceinline">]>, + Accessor<"isMSVCForceInlineCalls", [CXX11<"msvc", "forceinline_calls">, + C23<"msvc", "forceinline_calls">]>]; let Subjects = SubjectList<[Function, Stmt], WarnDiag, "functions and statements">; let Documentation = [AlwaysInlineDocs]; diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 0e6b3f51a5231..ebf3245221dbc 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -3269,6 +3269,11 @@ def warn_function_attribute_ignored_in_stmt : Warning< "use '%0' on statements">, InGroup<IgnoredAttributes>; +def warn_stmt_attribute_ignored_in_function : Warning< + "attribute is ignored on this function as it only applies to statements; " + "use '%0' for functions">, + InGroup<IgnoredAttributes>; + def err_musttail_needs_trivial_args : Error< "tail call requires that the return value, all parameters, and any " "temporaries created by the expression are trivially destructible">; diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 1b7f41061061d..94ff47790a1d4 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -5130,6 +5130,18 @@ OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, } static void handleAlwaysInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) { + AlwaysInlineAttr AIA(S.Context, AL); + if (!S.getLangOpts().MicrosoftExt && + (AIA.isMSVCForceInline() || AIA.isMSVCForceInlineCalls())) { + S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL; + return; + } + if (AIA.isMSVCForceInlineCalls()) { + S.Diag(AL.getLoc(), diag::warn_stmt_attribute_ignored_in_function) + << "[[msvc::forceinline]]"; + return; + } + if (AlwaysInlineAttr *Inline = S.mergeAlwaysInlineAttr(D, AL, AL.getAttrName())) D->addAttr(Inline); diff --git a/clang/lib/Sema/SemaStmtAttr.cpp b/clang/lib/Sema/SemaStmtAttr.cpp index 27fd5563cc40e..f45c4333f94f6 100644 --- a/clang/lib/Sema/SemaStmtAttr.cpp +++ b/clang/lib/Sema/SemaStmtAttr.cpp @@ -312,7 +312,17 @@ static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) { AlwaysInlineAttr AIA(S.Context, A); - if (!AIA.isClangAlwaysInline()) { + if (!S.getLangOpts().MicrosoftExt && + (AIA.isMSVCForceInline() || AIA.isMSVCForceInlineCalls())) { + S.Diag(St->getBeginLoc(), diag::warn_attribute_ignored) << A; + return nullptr; + } + if (AIA.isMSVCForceInline()) { + S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) + << "[[msvc::forceinline_calls]]"; + return nullptr; + } + if (!AIA.isClangAlwaysInline() && !AIA.isMSVCForceInlineCalls()) { S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << "[[clang::always_inline]]"; return nullptr; diff --git a/clang/test/CodeGen/attr-ms-forceinline.cpp b/clang/test/CodeGen/attr-ms-forceinline.cpp index 580fea044a803..dd9e00f536e20 100644 --- a/clang/test/CodeGen/attr-ms-forceinline.cpp +++ b/clang/test/CodeGen/attr-ms-forceinline.cpp @@ -1,14 +1,16 @@ -// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-pc-windows-msvc -o - | FileCheck -check-prefix=CHECK-MSVC %s -// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-unknown-linux-gnu -o - | FileCheck -check-prefix=CHECK-LINUX %s +// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-pc-windows-msvc -fms-extensions -o - | FileCheck -check-prefix=CHECK-MSVC %s +// RUN: %clang_cc1 -std=c++23 -emit-llvm %s -triple x86_64-unknown-linux-gnu -fms-extensions -o - | FileCheck -check-prefix=CHECK-LINUX %s -[[msvc::forceinline]] void func() {} +[[msvc::forceinline]] void foo() {} -void call_func() { -// CHECK-MSVC-LABEL: @"?call_func@@YAXXZ"() -// CHECK-MSVC-NOT: call void @"?func@@YAXXZ"() -// CHECK-LINUX-LABEL: @_Z9call_funcv() -// CHECK-LINUX-NOT: call void @_Z4funcv() - func(); +void bar() {} + +void call_foo() { +// CHECK-MSVC-LABEL: @"?call_foo@@YAXXZ"() +// CHECK-MSVC-NOT: call void @"?foo@@YAXXZ"() +// CHECK-LINUX-LABEL: @_Z8call_foov() +// CHECK-LINUX-NOT: call void @_Z3foov() + foo(); } void call_lambda() { @@ -19,3 +21,14 @@ void call_lambda() { auto lambda = [] [[msvc::forceinline]] () {}; lambda(); } + +void call_bar_stmt() { +// CHECK-MSVC-LABEL: @"?call_bar_stmt@@YAXXZ"() +// CHECK-MSVC: call void @"?bar@@YAXXZ"() #[[ALWAYSINLINEATTR:[0-9]+]] +// CHECK-LINUX-LABEL: @_Z13call_bar_stmtv() +// CHECK-LINUX: call void @_Z3barv() #[[ALWAYSINLINEATTR:[0-9]+]] + [[msvc::forceinline_calls]] bar(); +} + +// CHECK-MSVC: attributes #[[ALWAYSINLINEATTR]] = { alwaysinline } +// CHECK-LINUX: attributes #[[ALWAYSINLINEATTR]] = { alwaysinline } diff --git a/clang/test/Sema/attr-ms-forceinline.c b/clang/test/Sema/attr-ms-forceinline.c new file mode 100644 index 0000000000000..bda31ea3eff97 --- /dev/null +++ b/clang/test/Sema/attr-ms-forceinline.c @@ -0,0 +1,32 @@ +// RUN: %clang_cc1 -verify=ms-ext -fms-extensions -fsyntax-only -std=c23 %s +// RUN: %clang_cc1 -verify=no-ms-ext -fsyntax-only -std=c23 %s + +void foo(void); + +[[msvc::forceinline]] void func(void) {} +// no-ms-ext-warning@-1 {{'msvc::forceinline' attribute ignored}} + +void stmt_forceinline(void) { + [[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(void) {} +// 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(void) { + [[msvc::forceinline_calls]] foo(); + // no-ms-ext-warning@-1 {{'msvc::forceinline_calls' attribute ignored}} +} + +[[msvc::forceinline(0)]] void func3(void); +// ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} +// no-ms-ext-warning@-2 {{'msvc::forceinline' attribute ignored}} + +void func4(void) { + [[msvc::forceinline_calls("foo")]] foo(); + // ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} + // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} +} diff --git a/clang/test/Sema/attr-ms-forceinline.cpp b/clang/test/Sema/attr-ms-forceinline.cpp index 619c7c8fb62da..5292470514a9e 100644 --- a/clang/test/Sema/attr-ms-forceinline.cpp +++ b/clang/test/Sema/attr-ms-forceinline.cpp @@ -1,9 +1,38 @@ -// RUN: %clang_cc1 -verify -fsyntax-only -std=c++23 %s -// expected-no-diagnostics +// 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 -[[msvc::forceinline]] void func(void) {} +void foo(); -void lambda() { +[[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-warning@-2 {{'msvc::forceinline' attribute ignored}} + +void func4() { + [[msvc::forceinline_calls("foo")]] foo(); + // ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} + // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} +} >From 0ab171d706ee963093d9276fd69b53a9902f0006 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <[email protected]> Date: Wed, 1 Apr 2026 00:09:53 +1100 Subject: [PATCH 5/6] [clang] Fix test failures --- clang/test/CodeGen/attr-ms-forceinline.cpp | 2 +- clang/test/Sema/attr-ms-forceinline.c | 6 +++--- clang/test/Sema/attr-ms-forceinline.cpp | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/clang/test/CodeGen/attr-ms-forceinline.cpp b/clang/test/CodeGen/attr-ms-forceinline.cpp index dd9e00f536e20..a44f5d05b29af 100644 --- a/clang/test/CodeGen/attr-ms-forceinline.cpp +++ b/clang/test/CodeGen/attr-ms-forceinline.cpp @@ -3,7 +3,7 @@ [[msvc::forceinline]] void foo() {} -void bar() {} +void bar(); void call_foo() { // CHECK-MSVC-LABEL: @"?call_foo@@YAXXZ"() diff --git a/clang/test/Sema/attr-ms-forceinline.c b/clang/test/Sema/attr-ms-forceinline.c index bda31ea3eff97..d80cabdba67b8 100644 --- a/clang/test/Sema/attr-ms-forceinline.c +++ b/clang/test/Sema/attr-ms-forceinline.c @@ -26,7 +26,7 @@ void stmt_forceinline_calls(void) { // no-ms-ext-warning@-2 {{'msvc::forceinline' attribute ignored}} void func4(void) { - [[msvc::forceinline_calls("foo")]] foo(); - // ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} - // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} + [[msvc::forceinline_calls("foo")]] foo(); + // ms-ext-error@-1 {{'msvc::forceinline_calls' attribute takes no arguments}} + // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} } diff --git a/clang/test/Sema/attr-ms-forceinline.cpp b/clang/test/Sema/attr-ms-forceinline.cpp index 5292470514a9e..72b165b25c021 100644 --- a/clang/test/Sema/attr-ms-forceinline.cpp +++ b/clang/test/Sema/attr-ms-forceinline.cpp @@ -32,7 +32,7 @@ void stmt_forceinline_calls() { // no-ms-ext-warning@-2 {{'msvc::forceinline' attribute ignored}} void func4() { - [[msvc::forceinline_calls("foo")]] foo(); - // ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} - // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} + [[msvc::forceinline_calls("foo")]] foo(); + // ms-ext-error@-1 {{'msvc::forceinline_calls' attribute takes no arguments}} + // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} } >From 42593afba9436b6ef48d8ca6f2e842f9541261e2 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <[email protected]> Date: Wed, 1 Apr 2026 00:32:28 +1100 Subject: [PATCH 6/6] [clang] Fix last test errors --- clang/test/Sema/attr-ms-forceinline.c | 4 ++-- clang/test/Sema/attr-ms-forceinline.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/test/Sema/attr-ms-forceinline.c b/clang/test/Sema/attr-ms-forceinline.c index d80cabdba67b8..1da92e89f2178 100644 --- a/clang/test/Sema/attr-ms-forceinline.c +++ b/clang/test/Sema/attr-ms-forceinline.c @@ -23,10 +23,10 @@ void stmt_forceinline_calls(void) { [[msvc::forceinline(0)]] void func3(void); // ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} -// no-ms-ext-warning@-2 {{'msvc::forceinline' attribute ignored}} +// no-ms-ext-error@-2 {{'msvc::forceinline' attribute takes no arguments}} void func4(void) { [[msvc::forceinline_calls("foo")]] foo(); // ms-ext-error@-1 {{'msvc::forceinline_calls' attribute takes no arguments}} - // no-ms-ext-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} + // no-ms-ext-error@-2 {{'msvc::forceinline_calls' attribute takes no arguments}} } diff --git a/clang/test/Sema/attr-ms-forceinline.cpp b/clang/test/Sema/attr-ms-forceinline.cpp index 72b165b25c021..5e1d2b3eeee85 100644 --- a/clang/test/Sema/attr-ms-forceinline.cpp +++ b/clang/test/Sema/attr-ms-forceinline.cpp @@ -29,10 +29,10 @@ void stmt_forceinline_calls() { [[msvc::forceinline(0)]] void func3(); // ms-ext-error@-1 {{'msvc::forceinline' attribute takes no arguments}} -// no-ms-ext-warning@-2 {{'msvc::forceinline' attribute ignored}} +// 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-warning@-2 {{'msvc::forceinline_calls' attribute ignored}} + // no-ms-ext-error@-2 {{'msvc::forceinline_calls' attribute takes no arguments}} } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
