]> granicus.if.org Git - clang/commit
DR1672, DR1813, DR1881, DR2120: Implement recent fixes to "standard
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 5 Apr 2018 18:55:37 +0000 (18:55 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 5 Apr 2018 18:55:37 +0000 (18:55 +0000)
commitf38834898ad991aec557e2a609c6b7c3b288bf10
treeb1fcea10dc274b0bf2a2181262316cc34ff1828b
parentfe9bac40707c0422d5d005717b6d0f915d5dd726
DR1672, DR1813, DR1881, DR2120: Implement recent fixes to "standard
layout" rules.

The new rules say that a standard-layout struct has its first non-static
data member and all base classes at offset 0, and consider a class to
not be standard-layout if that would result in multiple subobjects of a
single type having the same address.

We track "is C++11 standard-layout class" separately from "is
standard-layout class" so that the ABIs that need this information can
still use it.

Differential Revision: https://reviews.llvm.org/D45176

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329332 91177308-0d34-0410-b5e6-96231b3b80d8
17 files changed:
docs/ReleaseNotes.rst
include/clang/AST/DeclCXX.h
include/clang/AST/Type.h
lib/AST/ASTImporter.cpp
lib/AST/DeclCXX.cpp
lib/AST/RecordLayoutBuilder.cpp
lib/Serialization/ASTReaderDecl.cpp
lib/Serialization/ASTWriter.cpp
test/CXX/drs/dr14xx.cpp
test/CXX/drs/dr16xx.cpp
test/CXX/drs/dr18xx.cpp
test/CXX/drs/dr21xx.cpp
test/CXX/drs/dr22xx.cpp
test/Layout/watchos-standard-layout.cpp [new file with mode: 0644]
test/SemaCXX/type-traits.cpp
www/cxx_dr_status.html
www/make_cxx_dr_status