Date: Thu, 14 Mar 2019 19:41:17 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r345144 - in vendor/clang/dist-release_80: lib/AST test/SemaCXX Message-ID: <201903141941.x2EJfHJA069974@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Thu Mar 14 19:41:16 2019 New Revision: 345144 URL: https://svnweb.freebsd.org/changeset/base/345144 Log: Vendor import of clang release_80 branch r356034: https://llvm.org/svn/llvm-project/cfe/branches/release_80@356034 Modified: vendor/clang/dist-release_80/lib/AST/ExprConstant.cpp vendor/clang/dist-release_80/test/SemaCXX/constant-expression-cxx1y.cpp vendor/clang/dist-release_80/test/SemaCXX/enable_if.cpp Modified: vendor/clang/dist-release_80/lib/AST/ExprConstant.cpp ============================================================================== --- vendor/clang/dist-release_80/lib/AST/ExprConstant.cpp Thu Mar 14 19:41:13 2019 (r345143) +++ vendor/clang/dist-release_80/lib/AST/ExprConstant.cpp Thu Mar 14 19:41:16 2019 (r345144) @@ -10985,6 +10985,7 @@ bool Expr::EvaluateAsConstantExpr(EvalResult &Result, const ASTContext &Ctx) const { EvalInfo::EvaluationMode EM = EvalInfo::EM_ConstantExpression; EvalInfo Info(Ctx, Result, EM); + Info.InConstantContext = true; if (!::Evaluate(Result.Val, Info, this)) return false; @@ -11625,6 +11626,7 @@ bool Expr::EvaluateWithSubstitution(APValue &Value, AS const Expr *This) const { Expr::EvalStatus Status; EvalInfo Info(Ctx, Status, EvalInfo::EM_ConstantExpressionUnevaluated); + Info.InConstantContext = true; LValue ThisVal; const LValue *ThisPtr = nullptr; @@ -11708,6 +11710,7 @@ bool Expr::isPotentialConstantExprUnevaluated(Expr *E, EvalInfo Info(FD->getASTContext(), Status, EvalInfo::EM_PotentialConstantExpressionUnevaluated); + Info.InConstantContext = true; // Fabricate a call stack frame to give the arguments a plausible cover story. ArrayRef<const Expr*> Args; Modified: vendor/clang/dist-release_80/test/SemaCXX/constant-expression-cxx1y.cpp ============================================================================== --- vendor/clang/dist-release_80/test/SemaCXX/constant-expression-cxx1y.cpp Thu Mar 14 19:41:13 2019 (r345143) +++ vendor/clang/dist-release_80/test/SemaCXX/constant-expression-cxx1y.cpp Thu Mar 14 19:41:16 2019 (r345144) @@ -1135,3 +1135,27 @@ constexpr bool indirect_builtin_constant_p(const char return __builtin_constant_p(*__s); } constexpr bool n = indirect_builtin_constant_p("a"); + +__attribute__((enable_if(indirect_builtin_constant_p("a") == n, "OK"))) +int test_in_enable_if() { return 0; } +int n2 = test_in_enable_if(); + +template <bool n = indirect_builtin_constant_p("a")> +int test_in_template_param() { return 0; } +int n3 = test_in_template_param(); + +void test_in_case(int n) { + switch (n) { + case indirect_builtin_constant_p("abc"): + break; + } +} +enum InEnum1 { + ONE = indirect_builtin_constant_p("abc") +}; +enum InEnum2 : int { + TWO = indirect_builtin_constant_p("abc") +}; +enum class InEnum3 { + THREE = indirect_builtin_constant_p("abc") +}; Modified: vendor/clang/dist-release_80/test/SemaCXX/enable_if.cpp ============================================================================== --- vendor/clang/dist-release_80/test/SemaCXX/enable_if.cpp Thu Mar 14 19:41:13 2019 (r345143) +++ vendor/clang/dist-release_80/test/SemaCXX/enable_if.cpp Thu Mar 14 19:41:16 2019 (r345144) @@ -514,3 +514,11 @@ namespace TypeOfFn { static_assert(is_same<__typeof__(foo)*, decltype(&foo)>::value, ""); } + +namespace InConstantContext { +void foo(const char *s) __attribute__((enable_if(((void)__builtin_constant_p(*s), true), "trap"))) {} + +void test() { + InConstantContext::foo("abc"); +} +} // namespace InConstantContext
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201903141941.x2EJfHJA069974>