Add missing serialization code for one of the CXXRecordDecl definition flags.

llvm-svn: 206493
This commit is contained in:
Richard Smith 2014-04-17 20:33:01 +00:00
parent 5b01593de4
commit b45a6f72b6
4 changed files with 20 additions and 0 deletions

View File

@ -1199,6 +1199,7 @@ void ASTDeclReader::ReadCXXDefinitionData(
Data.DefaultedMoveAssignmentIsDeleted = Record[Idx++];
Data.DefaultedDestructorIsDeleted = Record[Idx++];
Data.HasTrivialSpecialMembers = Record[Idx++];
Data.DeclaredNonTrivialSpecialMembers = Record[Idx++];
Data.HasIrrelevantDestructor = Record[Idx++];
Data.HasConstexprNonCopyMoveConstructor = Record[Idx++];
Data.DefaultedDefaultConstructorIsConstexpr = Record[Idx++];

View File

@ -5248,6 +5248,7 @@ void ASTWriter::AddCXXDefinitionData(const CXXRecordDecl *D, RecordDataImpl &Rec
Record.push_back(Data.DefaultedMoveAssignmentIsDeleted);
Record.push_back(Data.DefaultedDestructorIsDeleted);
Record.push_back(Data.HasTrivialSpecialMembers);
Record.push_back(Data.DeclaredNonTrivialSpecialMembers);
Record.push_back(Data.HasIrrelevantDestructor);
Record.push_back(Data.HasConstexprNonCopyMoveConstructor);
Record.push_back(Data.DefaultedDefaultConstructorIsConstexpr);

View File

@ -3,3 +3,18 @@ class HasFriends {
friend void friend_2(HasFriends);
void private_thing();
};
struct HasNontrivialDefaultConstructor {
HasNontrivialDefaultConstructor() = default;
HasNontrivialDefaultConstructor(int n = 0);
// Ensure this class is not POD but is still trivially-copyable.
// This is necessary to exercise the second static_assert below,
// because GCC's spec for __has_trivial_constructor is absurd.
int m;
private:
int n;
};
static_assert(!__is_trivial(HasNontrivialDefaultConstructor), "");
static_assert(!__has_trivial_constructor(HasNontrivialDefaultConstructor), "");

View File

@ -19,3 +19,6 @@ void test_friends(HasFriends s) {
friend_1(s);
friend_2(s);
}
static_assert(!__is_trivial(HasNontrivialDefaultConstructor), "");
static_assert(!__has_trivial_constructor(HasNontrivialDefaultConstructor), "");