[clang] [clang-cl] Don't add implicit NoBuiltinAttr to deleted or defaulted functions (#116256) (PR #119719)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 12 08:40:47 PST 2024
https://github.com/VScigolevs created https://github.com/llvm/llvm-project/pull/119719
None
>From 7babf835ecaf3081473b42ee48f522ff3bfb39ee Mon Sep 17 00:00:00 2001
From: Vladimirs Scigolevs <vladimirs.scigolevs at zimperium.com>
Date: Fri, 22 Nov 2024 11:26:37 +0200
Subject: [PATCH] [clang-cl] Don't add implicit NoBuiltinAttr to deleted or
defaulted functions (#116256)
---
clang/lib/Sema/SemaAttr.cpp | 2 ++
.../msvc-pragma-function-no-builtin-attr.cpp | 32 +++++++++++++++++++
2 files changed, 34 insertions(+)
create mode 100644 clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp
diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp
index 479f47962a7c3d..44485e71d57a01 100644
--- a/clang/lib/Sema/SemaAttr.cpp
+++ b/clang/lib/Sema/SemaAttr.cpp
@@ -1310,6 +1310,8 @@ void Sema::AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD,
}
void Sema::AddImplicitMSFunctionNoBuiltinAttr(FunctionDecl *FD) {
+ if (FD->isDeleted() || FD->isDefaulted())
+ return;
SmallVector<StringRef> V(MSFunctionNoBuiltins.begin(),
MSFunctionNoBuiltins.end());
if (!MSFunctionNoBuiltins.empty())
diff --git a/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp b/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp
new file mode 100644
index 00000000000000..cd2ac7d1edbefb
--- /dev/null
+++ b/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp
@@ -0,0 +1,32 @@
+// RUN: %clang_cl -fms-compatibility -Xclang -ast-dump -fsyntax-only %s | FileCheck %s
+
+extern "C" __inline float __cdecl fabsf( float _X);
+// CHECK: FunctionDecl {{.*}} fabsf
+#pragma function(fabsf)
+ __inline float __cdecl fabsf( float _X)
+{
+ return 0;
+}
+// CHECK: FunctionDecl {{.*}} fabsf
+// CHECK: NoBuiltinAttr {{.*}} <<invalid sloc>> Implicit fabsf
+
+int bar() {
+ return 0;
+}
+// CHECK: FunctionDecl {{.*}} bar
+// CHECK: NoBuiltinAttr {{.*}} <<invalid sloc>> Implicit fabsf
+
+struct A {
+ int foo() = delete;
+ // CHECK: CXXMethodDecl {{.*}} foo 'int ()' delete
+ // CHECK-NOT: NoBuiltinAttr
+ A() = default;
+ // CHECK: CXXConstructorDecl {{.*}} A 'void ()' default
+ // CHECK-NOT: NoBuiltinAttr
+};
+
+int main() {
+ return 0;
+}
+// CHECK: FunctionDecl {{.*}} main
+// CHECK: NoBuiltinAttr {{.*}} <<invalid sloc>> Implicit fabsf
More information about the cfe-commits
mailing list