[clang] [clang] Add support for `[[msvc::forceinline]]` (PR #185282)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 8 07:30:15 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Trung Nguyen (trungnt2910)
<details>
<summary>Changes</summary>
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]]`.
---
Full diff: https://github.com/llvm/llvm-project/pull/185282.diff
3 Files Affected:
- (modified) clang/include/clang/Basic/Attr.td (+2-1)
- (added) clang/test/CodeGen/attr-ms-forceinline.cpp (+16)
- (added) clang/test/Sema/attr-ms-forceinline.cpp (+9)
``````````diff
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();
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/185282
More information about the cfe-commits
mailing list