Restructure checking for, and warning on, lifetime extension.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 17 Jul 2018 22:24:09 +0000 (22:24 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 17 Jul 2018 22:24:09 +0000 (22:24 +0000)
commitd87aab939a07d832b226fc839b981d2b3be36802
tree39750d3720a80b406d10c9998dceacc383829457
parent3e22733698cdd8a0a26487df7430d243a81a3bfa
Restructure checking for, and warning on, lifetime extension.

This change implements C++ DR1696, which makes initialization of a
reference member of a class from a temporary object ill-formed. The
standard wording here is imprecise, but we interpret it as meaning that
any time a mem-initializer would result in lifetime extension, the
program is ill-formed.

This reinstates r337226, reverted in r337255, with a fix for the
InitializedEntity alignment problem that was breaking ARM buildbots.

llvm-svn: 337329
23 files changed:
clang/include/clang/Basic/DiagnosticGroups.td
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Initialization.h
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaDeclCXX.cpp
clang/lib/Sema/SemaExprCXX.cpp
clang/lib/Sema/SemaInit.cpp
clang/test/Analysis/initializer.cpp
clang/test/CXX/drs/dr16xx.cpp
clang/test/CXX/drs/dr18xx.cpp
clang/test/CXX/special/class.copy/p11.0x.copy.cpp
clang/test/CXX/special/class.copy/p11.0x.move.cpp
clang/test/CXX/special/class.ctor/p5-0x.cpp
clang/test/CXX/temp/temp.param/p5.cpp
clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
clang/test/CodeGenCXX/temporaries.cpp
clang/test/SemaCXX/constant-expression-cxx11.cpp
clang/test/SemaCXX/constexpr-default-arg.cpp
clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
clang/test/SemaCXX/eval-crashes.cpp
clang/test/SemaCXX/member-init.cpp
clang/test/SemaCXX/warn-dangling-field.cpp
clang/www/cxx_dr_status.html