Set InvalidDecl directly when deserializing a Decl
When parsing a C++17 binding declaration, we first create the BindingDecls in Sema::ActOnDecompositionDeclarator, and then build the DecompositionDecl in Sema::ActOnVariableDeclarator, so the contained BindingDecls are never null. But when deserializing, we read the DecompositionDecl with all properties before filling in the Bindings. Among other things, reading a declaration reads whether it's invalid, then calling setInvalidDecl which assumes that all bindings of the DecompositionDecl are available, but that isn't the case. Deserialization should just set all properties directly without invoking subsequent functions, so we just set the flag without using the setter. Fixes PR34960. Reviewed By: rsmith Differential Revision: https://reviews.llvm.org/D86207
This commit is contained in:
parent
8544defdcb
commit
16975a638d
|
@ -585,7 +585,7 @@ void ASTDeclReader::VisitDecl(Decl *D) {
|
|||
Reader.getContext());
|
||||
}
|
||||
D->setLocation(ThisDeclLoc);
|
||||
D->setInvalidDecl(Record.readInt());
|
||||
D->InvalidDecl = Record.readInt();
|
||||
if (Record.readInt()) { // hasAttrs
|
||||
AttrVec Attrs;
|
||||
Record.readAttributes(Attrs);
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
// RUN: %clang_cc1 -pedantic -std=c++1z -include %s -verify %s
|
||||
//
|
||||
// With PCH:
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -verify %s
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch -fallow-pch-with-compiler-errors %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -fallow-pch-with-compiler-errors -verify %s
|
||||
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch -fpch-instantiate-templates %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -verify %s
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch -fallow-pch-with-compiler-errors -fpch-instantiate-templates %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -fallow-pch-with-compiler-errors -verify %s
|
||||
|
||||
#ifndef HEADER
|
||||
#define HEADER
|
||||
|
@ -22,6 +22,8 @@ constexpr int foo(Q &&q) {
|
|||
return a * 10 + b;
|
||||
}
|
||||
|
||||
auto [noinit]; // expected-error{{decomposition declaration '[noinit]' requires an initializer}}
|
||||
|
||||
#else
|
||||
|
||||
int arr[2];
|
||||
|
|
Loading…
Reference in New Issue