[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