]> granicus.if.org Git - clang/commitdiff
Serialize the NonTrivialToPrimitive* flags I added in r326307.
authorAkira Hatanaka <ahatanaka@apple.com>
Tue, 13 Mar 2018 18:58:25 +0000 (18:58 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Tue, 13 Mar 2018 18:58:25 +0000 (18:58 +0000)
rdar://problem/38421774

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327434 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h
lib/Sema/SemaDecl.cpp
lib/Serialization/ASTReaderDecl.cpp
lib/Serialization/ASTWriterDecl.cpp
test/CodeGenObjC/strong-in-c-struct.m

index 57c6f4533630b78189597ef09f3bf451985690ca..e14187013a0f32d06dc6c88671eb0628be9c5660 100644 (file)
@@ -3616,24 +3616,24 @@ public:
     return NonTrivialToPrimitiveDefaultInitialize;
   }
 
-  void setNonTrivialToPrimitiveDefaultInitialize() {
-    NonTrivialToPrimitiveDefaultInitialize = true;
+  void setNonTrivialToPrimitiveDefaultInitialize(bool V) {
+    NonTrivialToPrimitiveDefaultInitialize = V;
   }
 
   bool isNonTrivialToPrimitiveCopy() const {
     return NonTrivialToPrimitiveCopy;
   }
 
-  void setNonTrivialToPrimitiveCopy() {
-    NonTrivialToPrimitiveCopy = true;
+  void setNonTrivialToPrimitiveCopy(bool V) {
+    NonTrivialToPrimitiveCopy = V;
   }
 
   bool isNonTrivialToPrimitiveDestroy() const {
     return NonTrivialToPrimitiveDestroy;
   }
 
-  void setNonTrivialToPrimitiveDestroy() {
-    NonTrivialToPrimitiveDestroy = true;
+  void setNonTrivialToPrimitiveDestroy(bool V) {
+    NonTrivialToPrimitiveDestroy = V;
   }
 
   /// \brief Determines whether this declaration represents the
index 6e4ae6ae159ba3d164e2507bbcc5af4cdca4e871..577724bd67ceef612bcbe86f096e4367712e902c 100644 (file)
@@ -15445,12 +15445,12 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl,
     if (Record && !getLangOpts().CPlusPlus) {
       QualType FT = FD->getType();
       if (FT.isNonTrivialToPrimitiveDefaultInitialize())
-        Record->setNonTrivialToPrimitiveDefaultInitialize();
+        Record->setNonTrivialToPrimitiveDefaultInitialize(true);
       QualType::PrimitiveCopyKind PCK = FT.isNonTrivialToPrimitiveCopy();
       if (PCK != QualType::PCK_Trivial && PCK != QualType::PCK_VolatileTrivial)
-        Record->setNonTrivialToPrimitiveCopy();
+        Record->setNonTrivialToPrimitiveCopy(true);
       if (FT.isDestructedType())
-        Record->setNonTrivialToPrimitiveDestroy();
+        Record->setNonTrivialToPrimitiveDestroy(true);
     }
 
     if (Record && FD->getType().isVolatileQualified())
index 10439d36f5bbbd85bfe3882cb33aebc62e13955c..ab99a170799dff0f3ae767c65663a28b32494cfe 100644 (file)
@@ -739,6 +739,9 @@ ASTDeclReader::VisitRecordDeclImpl(RecordDecl *RD) {
   RD->setAnonymousStructOrUnion(Record.readInt());
   RD->setHasObjectMember(Record.readInt());
   RD->setHasVolatileMember(Record.readInt());
+  RD->setNonTrivialToPrimitiveDefaultInitialize(Record.readInt());
+  RD->setNonTrivialToPrimitiveCopy(Record.readInt());
+  RD->setNonTrivialToPrimitiveDestroy(Record.readInt());
   return Redecl;
 }
 
index dd57029ca2e601b414c086d7307217be8a36d8d7..b3886b6555f84e9c52d5891e13c4534ea57b22f1 100644 (file)
@@ -465,6 +465,9 @@ void ASTDeclWriter::VisitRecordDecl(RecordDecl *D) {
   Record.push_back(D->isAnonymousStructOrUnion());
   Record.push_back(D->hasObjectMember());
   Record.push_back(D->hasVolatileMember());
+  Record.push_back(D->isNonTrivialToPrimitiveDefaultInitialize());
+  Record.push_back(D->isNonTrivialToPrimitiveCopy());
+  Record.push_back(D->isNonTrivialToPrimitiveDestroy());
 
   if (D->getDeclContext() == D->getLexicalDeclContext() &&
       !D->hasAttrs() &&
@@ -1899,6 +1902,14 @@ void ASTWriter::WriteDeclAbbrevs() {
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // AnonymousStructUnion
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // hasObjectMember
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // hasVolatileMember
+
+  // isNonTrivialToPrimitiveDefaultInitialize
+  Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
+  // isNonTrivialToPrimitiveCopy
+  Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
+  // isNonTrivialToPrimitiveDestroy
+  Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
+
   // DC
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));   // LexicalOffset
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));   // VisibleOffset
index c48c66316d7b8eb26270f467bbb2b83d2f955dd1..11291f746787818cf85d7415c3675203939dc271 100644 (file)
@@ -1,4 +1,10 @@
-// RUN: %clang_cc1 -triple arm64-apple-ios11 -fobjc-arc -fblocks  -fobjc-runtime=ios-11.0 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple arm64-apple-ios11 -fobjc-arc -fblocks  -fobjc-runtime=ios-11.0 -emit-llvm -o - -DUSESTRUCT %s | FileCheck %s
+
+// RUN: %clang_cc1 -triple arm64-apple-ios11 -fobjc-arc -fblocks  -fobjc-runtime=ios-11.0 -emit-pch -o %t %s
+// RUN: %clang_cc1 -triple arm64-apple-ios11 -fobjc-arc -fblocks  -fobjc-runtime=ios-11.0 -include-pch %t -emit-llvm -o - -DUSESTRUCT %s | FileCheck %s
+
+#ifndef HEADER
+#define HEADER
 
 typedef void (^BlockTy)(void);
 
@@ -63,6 +69,10 @@ typedef struct {
   volatile char i6;
 } Bitfield1;
 
+#endif
+
+#ifdef USESTRUCT
+
 StrongSmall getStrongSmall(void);
 StrongOuter getStrongOuter(void);
 void calleeStrongSmall(StrongSmall);
@@ -520,3 +530,5 @@ void test_copy_constructor_Bitfield0(Bitfield0 *a) {
 void test_copy_constructor_Bitfield1(Bitfield1 *a) {
   Bitfield1 t = *a;
 }
+
+#endif /* USESTRUCT */