]> granicus.if.org Git - clang/commit
Update constexpr implementation to match CWG's chosen approach for core issues
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 13 Feb 2012 03:54:03 +0000 (03:54 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 13 Feb 2012 03:54:03 +0000 (03:54 +0000)
commit86c3ae46250cdcc57778c27826060779a92f3815
tree0d448fb2248c76e1339de8ad2c8c28d2b08d9b14
parent9b338a7bca39a68ae9f8c57d9210f19f7e45b665
Update constexpr implementation to match CWG's chosen approach for core issues
1358, 1360, 1452 and 1453.
 - Instantiations of constexpr functions are always constexpr. This removes the
   need for separate declaration/definition checking, which is now gone.
 - This makes it possible for a constexpr function to be virtual, if they are
   only dependently virtual. Virtual calls to such functions are not constant
   expressions.
 - Likewise, it's now possible for a literal type to have virtual base classes.
   A constexpr constructor for such a type cannot actually produce a constant
   expression, though, so add a special-case diagnostic for a constructor call
   to such a type rather than trying to evaluate it.
 - Classes with trivial default constructors (for which value initialization can
   produce a fully-initialized value) are considered literal types.
 - Classes with volatile members are not literal types.
 - constexpr constructors can be members of non-literal types. We do not yet use
   static initialization for global objects constructed in this way.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150359 91177308-0d34-0410-b5e6-96231b3b80d8
21 files changed:
include/clang/AST/DeclCXX.h
include/clang/Basic/DiagnosticASTKinds.td
include/clang/Basic/DiagnosticSemaKinds.td
include/clang/Sema/Sema.h
lib/AST/DeclCXX.cpp
lib/AST/ExprConstant.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
lib/Sema/SemaType.cpp
test/CXX/basic/basic.types/p10.cpp
test/CXX/class/class.static/class.static.data/p3.cpp
test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp
test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp
test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp
test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p9.cpp
test/CXX/expr/expr.const/p2-0x.cpp
test/CXX/special/class.ctor/p6-0x.cpp
test/SemaCXX/constexpr-value-init.cpp
test/SemaCXX/literal-type.cpp