forked from OSchip/llvm-project
Finish implementing (de-)serialization of the CXXDefinitionData bits
needed for implicit move constructors and move assignment operators. Fixes PR10847. llvm-svn: 139144
This commit is contained in:
parent
146b8e9a58
commit
cd0d826001
|
@ -859,7 +859,9 @@ void ASTDeclReader::ReadCXXDefinitionData(
|
||||||
const RecordData &Record, unsigned &Idx) {
|
const RecordData &Record, unsigned &Idx) {
|
||||||
Data.UserDeclaredConstructor = Record[Idx++];
|
Data.UserDeclaredConstructor = Record[Idx++];
|
||||||
Data.UserDeclaredCopyConstructor = Record[Idx++];
|
Data.UserDeclaredCopyConstructor = Record[Idx++];
|
||||||
|
Data.UserDeclaredMoveConstructor = Record[Idx++];
|
||||||
Data.UserDeclaredCopyAssignment = Record[Idx++];
|
Data.UserDeclaredCopyAssignment = Record[Idx++];
|
||||||
|
Data.UserDeclaredMoveAssignment = Record[Idx++];
|
||||||
Data.UserDeclaredDestructor = Record[Idx++];
|
Data.UserDeclaredDestructor = Record[Idx++];
|
||||||
Data.Aggregate = Record[Idx++];
|
Data.Aggregate = Record[Idx++];
|
||||||
Data.PlainOldData = Record[Idx++];
|
Data.PlainOldData = Record[Idx++];
|
||||||
|
@ -884,7 +886,9 @@ void ASTDeclReader::ReadCXXDefinitionData(
|
||||||
Data.UserProvidedDefaultConstructor = Record[Idx++];
|
Data.UserProvidedDefaultConstructor = Record[Idx++];
|
||||||
Data.DeclaredDefaultConstructor = Record[Idx++];
|
Data.DeclaredDefaultConstructor = Record[Idx++];
|
||||||
Data.DeclaredCopyConstructor = Record[Idx++];
|
Data.DeclaredCopyConstructor = Record[Idx++];
|
||||||
|
Data.DeclaredMoveConstructor = Record[Idx++];
|
||||||
Data.DeclaredCopyAssignment = Record[Idx++];
|
Data.DeclaredCopyAssignment = Record[Idx++];
|
||||||
|
Data.DeclaredMoveAssignment = Record[Idx++];
|
||||||
Data.DeclaredDestructor = Record[Idx++];
|
Data.DeclaredDestructor = Record[Idx++];
|
||||||
Data.FailedImplicitMoveConstructor = Record[Idx++];
|
Data.FailedImplicitMoveConstructor = Record[Idx++];
|
||||||
Data.FailedImplicitMoveAssignment = Record[Idx++];
|
Data.FailedImplicitMoveAssignment = Record[Idx++];
|
||||||
|
|
|
@ -3878,7 +3878,9 @@ void ASTWriter::AddCXXDefinitionData(const CXXRecordDecl *D, RecordDataImpl &Rec
|
||||||
struct CXXRecordDecl::DefinitionData &Data = *D->DefinitionData;
|
struct CXXRecordDecl::DefinitionData &Data = *D->DefinitionData;
|
||||||
Record.push_back(Data.UserDeclaredConstructor);
|
Record.push_back(Data.UserDeclaredConstructor);
|
||||||
Record.push_back(Data.UserDeclaredCopyConstructor);
|
Record.push_back(Data.UserDeclaredCopyConstructor);
|
||||||
|
Record.push_back(Data.UserDeclaredMoveConstructor);
|
||||||
Record.push_back(Data.UserDeclaredCopyAssignment);
|
Record.push_back(Data.UserDeclaredCopyAssignment);
|
||||||
|
Record.push_back(Data.UserDeclaredMoveAssignment);
|
||||||
Record.push_back(Data.UserDeclaredDestructor);
|
Record.push_back(Data.UserDeclaredDestructor);
|
||||||
Record.push_back(Data.Aggregate);
|
Record.push_back(Data.Aggregate);
|
||||||
Record.push_back(Data.PlainOldData);
|
Record.push_back(Data.PlainOldData);
|
||||||
|
@ -3903,7 +3905,9 @@ void ASTWriter::AddCXXDefinitionData(const CXXRecordDecl *D, RecordDataImpl &Rec
|
||||||
Record.push_back(Data.UserProvidedDefaultConstructor);
|
Record.push_back(Data.UserProvidedDefaultConstructor);
|
||||||
Record.push_back(Data.DeclaredDefaultConstructor);
|
Record.push_back(Data.DeclaredDefaultConstructor);
|
||||||
Record.push_back(Data.DeclaredCopyConstructor);
|
Record.push_back(Data.DeclaredCopyConstructor);
|
||||||
|
Record.push_back(Data.DeclaredMoveConstructor);
|
||||||
Record.push_back(Data.DeclaredCopyAssignment);
|
Record.push_back(Data.DeclaredCopyAssignment);
|
||||||
|
Record.push_back(Data.DeclaredMoveAssignment);
|
||||||
Record.push_back(Data.DeclaredDestructor);
|
Record.push_back(Data.DeclaredDestructor);
|
||||||
Record.push_back(Data.FailedImplicitMoveConstructor);
|
Record.push_back(Data.FailedImplicitMoveConstructor);
|
||||||
Record.push_back(Data.FailedImplicitMoveAssignment);
|
Record.push_back(Data.FailedImplicitMoveAssignment);
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
// Test with PCH
|
||||||
|
// RUN: %clang_cc1 -std=c++0x -x c++-header -emit-pch -o %t %s
|
||||||
|
// RUN: %clang_cc1 -std=c++0x -include-pch %t -verify %s
|
||||||
|
|
||||||
|
// PR10847
|
||||||
|
#ifndef HEADER
|
||||||
|
#define HEADER
|
||||||
|
struct NSSize {
|
||||||
|
double width;
|
||||||
|
double height;
|
||||||
|
};
|
||||||
|
typedef struct NSSize NSSize;
|
||||||
|
|
||||||
|
static inline NSSize NSMakeSize(double w, double h) {
|
||||||
|
NSSize s = { w, h };
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
float test(float v1, float v2) {
|
||||||
|
NSSize s = NSMakeSize(v1, v2);
|
||||||
|
return s.width;
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue