[FIX] Remove pointer in attribute to eliminate leaks (see D71830)
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index fa5b43d..29abb9c 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -12612,10 +12612,10 @@
   C->setKindKwLoc(Record.readSourceLocation());
 }
 
-OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
-  OMPTraitInfo *TI = new OMPTraitInfo();
-  TI->Sets.resize(readUInt32());
-  for (auto &Set : TI->Sets) {
+OMPTraitInfo ASTRecordReader::readOMPTraitInfo() {
+  OMPTraitInfo TI;
+  TI.Sets.resize(readUInt32());
+  for (auto &Set : TI.Sets) {
     Set.Kind = readEnum<llvm::omp::TraitSet>();
     Set.Selectors.resize(readUInt32());
     for (auto &Selector : Set.Selectors) {
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp
index 45c10be..091bf56 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2756,7 +2756,7 @@
     return Reader.readVersionTuple();
   }
 
-  OMPTraitInfo *readOMPTraitInfo() { return Reader.readOMPTraitInfo(); }
+  OMPTraitInfo readOMPTraitInfo() { return Reader.readOMPTraitInfo(); }
 
   template <typename T> T *GetLocalDeclAs(uint32_t LocalID) {
     return Reader.GetLocalDeclAs<T>(LocalID);
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index 4ee59f7..159ebe1 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -6578,9 +6578,9 @@
   Record.AddSourceLocation(C->getKindKwLoc());
 }
 
-void ASTRecordWriter::writeOMPTraitInfo(OMPTraitInfo *TI) {
-  writeUInt32(TI->Sets.size());
-  for (const auto &Set : TI->Sets) {
+void ASTRecordWriter::writeOMPTraitInfo(const OMPTraitInfo &TI) {
+  writeUInt32(TI.Sets.size());
+  for (const auto &Set : TI.Sets) {
     writeEnum(Set.Kind);
     writeUInt32(Set.Selectors.size());
     for (const auto &Selector : Set.Selectors) {