Author: void Date: Sun Nov 25 18:10:53 2018 New Revision: 347531 URL: http://llvm.org/viewvc/llvm-project?rev=347531&view=rev Log: A "constexpr" is evaluated in a constant context. Make sure this is reflected if a __builtin_constant_p() is a part of a constexpr.
Modified: cfe/trunk/lib/AST/ExprConstant.cpp cfe/trunk/test/SemaCXX/constant-expression-cxx1y.cpp Modified: cfe/trunk/lib/AST/ExprConstant.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=347531&r1=347530&r2=347531&view=diff ============================================================================== --- cfe/trunk/lib/AST/ExprConstant.cpp (original) +++ cfe/trunk/lib/AST/ExprConstant.cpp Sun Nov 25 18:10:53 2018 @@ -10882,6 +10882,7 @@ bool Expr::EvaluateAsInitializer(APValue ? EvalInfo::EM_ConstantExpression : EvalInfo::EM_ConstantFold); InitInfo.setEvaluatingDecl(VD, Value); + InitInfo.InConstantContext = true; LValue LVal; LVal.set(VD); @@ -11544,6 +11545,7 @@ bool Expr::isPotentialConstantExpr(const EvalInfo Info(FD->getASTContext(), Status, EvalInfo::EM_PotentialConstantExpression); + Info.InConstantContext = true; const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD); const CXXRecordDecl *RD = MD ? MD->getParent()->getCanonicalDecl() : nullptr; Modified: cfe/trunk/test/SemaCXX/constant-expression-cxx1y.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/constant-expression-cxx1y.cpp?rev=347531&r1=347530&r2=347531&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/constant-expression-cxx1y.cpp (original) +++ cfe/trunk/test/SemaCXX/constant-expression-cxx1y.cpp Sun Nov 25 18:10:53 2018 @@ -1122,3 +1122,11 @@ constexpr E e2 = E{0}; static_assert(e2.x != e2.y, ""); } // namespace IndirectFields + +constexpr bool __constant_string_p(const char *__s) { + while (__builtin_constant_p(*__s) && *__s) + __s++; + return __builtin_constant_p(*__s); +} + +constexpr bool n = __constant_string_p("a"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits