summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-02-06 23:20:21 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-02-06 23:20:21 +0000
commit72625c2cada9bb092273f7ddc469c4da58159c6f (patch)
treefbfc65e99325d402dbd418114a10f3b34632c6d5
parentdf956a2e782ebc0e201668b8436f40e38bfe0a65 (diff)
downloadbcm5719-llvm-72625c2cada9bb092273f7ddc469c4da58159c6f.tar.gz
bcm5719-llvm-72625c2cada9bb092273f7ddc469c4da58159c6f.zip
PR22405: don't lose implicit-deleted-ness across AST write / read.
llvm-svn: 228464
-rw-r--r--clang/lib/Serialization/ASTWriterDecl.cpp28
-rw-r--r--clang/test/PCH/implicitly-deleted.cpp18
2 files changed, 32 insertions, 14 deletions
diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp
index 6b376597922..e4a0426ade6 100644
--- a/clang/lib/Serialization/ASTWriterDecl.cpp
+++ b/clang/lib/Serialization/ASTWriterDecl.cpp
@@ -370,21 +370,21 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) {
// FunctionDecl's body is handled last at ASTWriterDecl::Visit,
// after everything else is written.
- Record.push_back(D->getStorageClass()); // FIXME: stable encoding
+ Record.push_back((int)D->SClass); // FIXME: stable encoding
Record.push_back(D->IsInline);
- Record.push_back(D->isInlineSpecified());
- Record.push_back(D->isVirtualAsWritten());
- Record.push_back(D->isPure());
- Record.push_back(D->hasInheritedPrototype());
- Record.push_back(D->hasWrittenPrototype());
- Record.push_back(D->isDeletedAsWritten());
- Record.push_back(D->isTrivial());
- Record.push_back(D->isDefaulted());
- Record.push_back(D->isExplicitlyDefaulted());
- Record.push_back(D->hasImplicitReturnZero());
- Record.push_back(D->isConstexpr());
+ Record.push_back(D->IsInlineSpecified);
+ Record.push_back(D->IsVirtualAsWritten);
+ Record.push_back(D->IsPure);
+ Record.push_back(D->HasInheritedPrototype);
+ Record.push_back(D->HasWrittenPrototype);
+ Record.push_back(D->IsDeleted);
+ Record.push_back(D->IsTrivial);
+ Record.push_back(D->IsDefaulted);
+ Record.push_back(D->IsExplicitlyDefaulted);
+ Record.push_back(D->HasImplicitReturnZero);
+ Record.push_back(D->IsConstexpr);
Record.push_back(D->HasSkippedBody);
- Record.push_back(D->isLateTemplateParsed());
+ Record.push_back(D->IsLateTemplateParsed);
Record.push_back(D->getLinkageInternal());
Writer.AddSourceLocation(D->getLocEnd(), Record);
@@ -1819,7 +1819,7 @@ void ASTWriter::WriteDeclAbbrevs() {
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Pure
Abv->Add(BitCodeAbbrevOp(0)); // HasInheritedProto
Abv->Add(BitCodeAbbrevOp(1)); // HasWrittenProto
- Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // DeletedAsWritten
+ Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Deleted
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Trivial
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Defaulted
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ExplicitlyDefaulted
diff --git a/clang/test/PCH/implicitly-deleted.cpp b/clang/test/PCH/implicitly-deleted.cpp
new file mode 100644
index 00000000000..5238fd3d93c
--- /dev/null
+++ b/clang/test/PCH/implicitly-deleted.cpp
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -std=c++11 -x c++-header %s -emit-pch -o %t.pch
+// RUN: %clang_cc1 -std=c++11 -x c++ /dev/null -include-pch %t.pch
+class move_only { move_only(const move_only&) = delete; move_only(move_only&&); };
+struct sb {
+ move_only il;
+ sb();
+ sb(sb &&);
+};
+
+template<typename T> T make();
+template<typename T> void doit(decltype(T(make<const T&>()))*) { T(make<const T&>()); }
+template<typename T> void doit(...) { T(make<T&&>()); }
+template<typename T> void later() { doit<T>(0); }
+
+void fn1() {
+ sb x;
+ later<sb>();
+}
OpenPOWER on IntegriCloud