[clang] feb7872 - [APINotes] Avoid duplicated attributes for class template instantiations
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 15 10:50:27 PST 2025
Author: Egor Zhdan
Date: 2025-01-15T18:50:23Z
New Revision: feb787244e54fe5abe5a96fefc4c74019f21a0ff
URL: https://github.com/llvm/llvm-project/commit/feb787244e54fe5abe5a96fefc4c74019f21a0ff
DIFF: https://github.com/llvm/llvm-project/commit/feb787244e54fe5abe5a96fefc4c74019f21a0ff.diff
LOG: [APINotes] Avoid duplicated attributes for class template instantiations
If a C++ class template is annotated via API Notes, the instantiations
had the attributes repeated twice. This is because Clang was adding the
attribute twice while processing the same class template. This change
makes sure we don't try to add attributes from API Notes twice.
There is currently no way to annotate specific instantiations using API
Notes.
rdar://142539959
Added:
Modified:
clang/lib/Sema/SemaTemplate.cpp
clang/test/APINotes/Inputs/Headers/Templates.h
clang/test/APINotes/templates.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index ce672b00893b0d..50b479052a25f0 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -2145,7 +2145,6 @@ DeclResult Sema::CheckClassTemplate(
NewClass->startDefinition();
ProcessDeclAttributeList(S, NewClass, Attr);
- ProcessAPINotes(NewClass);
if (PrevClassTemplate)
mergeDeclAttributes(NewClass, PrevClassTemplate->getTemplatedDecl());
diff --git a/clang/test/APINotes/Inputs/Headers/Templates.h b/clang/test/APINotes/Inputs/Headers/Templates.h
index 862035fee363f7..2a86a46d4af27d 100644
--- a/clang/test/APINotes/Inputs/Headers/Templates.h
+++ b/clang/test/APINotes/Inputs/Headers/Templates.h
@@ -6,4 +6,5 @@ struct Box {
const T* get_ptr() const { return &value; }
};
+using FloatBox = Box<float>;
using IntBox = Box<int>;
diff --git a/clang/test/APINotes/templates.cpp b/clang/test/APINotes/templates.cpp
index 0556eba925a514..48109011e73a95 100644
--- a/clang/test/APINotes/templates.cpp
+++ b/clang/test/APINotes/templates.cpp
@@ -7,3 +7,6 @@
// CHECK-BOX: Dumping Box:
// CHECK-BOX-NEXT: ClassTemplateDecl {{.+}} imported in Templates Box
// CHECK-BOX: SwiftAttrAttr {{.+}} <<invalid sloc>> "import_owned"
+
+// Make sure the attributes aren't duplicated.
+// CHECK-BOX-NOT: SwiftAttrAttr {{.+}} <<invalid sloc>> "import_owned"
More information about the cfe-commits
mailing list