Reverting this commit doesn't solve anything, sorry for the noise. It seems to hit an infinite loop:
frame #17: 0x00000001083d48ab clang`::Visit() [inlined] HandleConditionalOperator<clang::ConditionalOperator> + 165 at ExprConstant.cpp:4212 frame #18: 0x00000001083d4806 clang`::Visit() [inlined] VisitConditionalOperator at ExprConstant.cpp:4331 frame #19: 0x00000001083d4806 clang`::Visit() + 33158 at StmtNodes.inc:129 frame #20: 0x000000010835c43c clang`::Evaluate() + 1468 at ExprConstant.cpp:9155 frame #21: 0x00000001083bad54 clang`::EvaluateStmt() + 15572 at ExprConstant.cpp:3663 frame #22: 0x00000001083b9147 clang`::EvaluateStmt() + 8391 at ExprConstant.cpp:3673 frame #23: 0x0000000108360829 clang`::HandleFunctionCall() + 1657 at ExprConstant.cpp:3994 frame #24: 0x000000010842f681 clang`::handleCallExpr() + 3697 at ExprConstant.cpp:4438 frame #25: 0x00000001083ea4c5 clang`::VisitCallExpr() [inlined] VisitCallExpr + 54 at ExprConstant.cpp:4355 frame #26: 0x00000001083ea48f clang`::VisitCallExpr() + 11407 at ExprConstant.cpp:6937 frame #27: 0x00000001083ccdcd clang`::Visit() + 1869 at Expr.h:1705 frame #28: 0x000000010835c43c clang`::Evaluate() + 1468 at ExprConstant.cpp:9155 frame #29: 0x00000001083cf094 clang`::Visit() [inlined] VisitBinaryConditionalOperator + 145 at ExprConstant.cpp:4307 frame #30: 0x00000001083cf003 clang`::Visit() + 10627 at StmtNodes.inc:123 frame #31: 0x00000001083d1b7f clang`::Visit() + 21759 at ExprCXX.h:2998 frame #32: 0x00000001083d48ab clang`::Visit() [inlined] HandleConditionalOperator<clang::ConditionalOperator> + 165 at ExprConstant.cpp:4212 sudo ulimit -s 65000 && lldb /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/./bin/clang -- -cc1 -internal-isystem /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/bin/../lib/clang/4.0.0/include -nostdsysteminc -triple i686-linux -Wno-string-plus-int -Wno-pointer-arith -Wno-zero-length-array -fsyntax-only -fcxx-exceptions -verify -std=c++11 -pedantic /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang/src/tools/clang/test/SemaCXX/constant-expression-cxx11.cpp -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion vedant > On Nov 14, 2016, at 1:56 PM, Vedant Kumar <v...@apple.com> wrote: > > Hi Faisal, > > Our ASan bot started complaining after this commit. > > I'm not 100% sure this caused it yet, though I'm running tests. > > Could you take a look? > > thanks, > vedant > > > FAIL: Clang :: SemaCXX/constant-expression-cxx11.cpp (9393 of 29261) > > ******************** TEST 'Clang :: SemaCXX/constant-expression-cxx11.cpp' > FAILED ******************** > > Script: > -- > ulimit -s 10000 && > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/./bin/clang > -cc1 -internal-isystem > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/bin/../lib/clang/4.0.0/include > -nostdsysteminc -triple i686-linux -Wno-string-plus-int -Wno-pointer-arith > -Wno-zero-length-array -fsyntax-only -fcxx-exceptions -verify -std=c++11 > -pedantic > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang/src/tools/clang/test/SemaCXX/constant-expression-cxx11.cpp > -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion > -- > Exit Code: 134 > > Command Output (stderr): > -- > ASAN:DEADLYSIGNAL > ================================================================= > ==86262==ERROR: AddressSanitizer: stack-overflow on address 0x7fff50fda580 > (pc 0x0001165bcf2d bp 0x7fff50fdb1f0 sp 0x7fff50fda580 T0) > #0 0x1165bcf2c in Evaluate(clang::APValue&, (anonymous > namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:9142 > > SUMMARY: AddressSanitizer: stack-overflow ExprConstant.cpp:9142 in > Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr > const*) > ==86262==ABORTING > Stack dump: > 0. Program arguments: > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/./bin/clang > -cc1 -internal-isystem > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/bin/../lib/clang/4.0.0/include > -nostdsysteminc -triple i686-linux -Wno-string-plus-int -Wno-pointer-arith > -Wno-zero-length-array -fsyntax-only -fcxx-exceptions -verify -std=c++11 > -pedantic > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang/src/tools/clang/test/SemaCXX/constant-expression-cxx11.cpp > -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion > 1. > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang/src/tools/clang/test/SemaCXX/constant-expression-cxx11.cpp:1457:1: > current parser token '}' > 2. > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang/src/tools/clang/test/SemaCXX/constant-expression-cxx11.cpp:1435:1: > parsing namespace 'RecursiveOpaqueExpr' > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/tools/clang/test/SemaCXX/Output/constant-expression-cxx11.cpp.script: > line 1: 86262 Abort trap: 6 > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/./bin/clang > -cc1 -internal-isystem > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang-build/bin/../lib/clang/4.0.0/include > -nostdsysteminc -triple i686-linux -Wno-string-plus-int -Wno-pointer-arith > -Wno-zero-length-array -fsyntax-only -fcxx-exceptions -verify -std=c++11 > -pedantic > /Users/buildslave/jenkins/workspace/clangsan-branch-R-nobootstrap-cmake/clang/src/tools/clang/test/SemaCXX/constant-expression-cxx11.cpp > -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion > > > >> On Nov 12, 2016, at 10:09 PM, Faisal Vali via cfe-commits >> <cfe-commits@lists.llvm.org> wrote: >> >> Author: faisalv >> Date: Sun Nov 13 00:09:16 2016 >> New Revision: 286748 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=286748&view=rev >> Log: >> Fix PR28366: Handle variables from enclosing local scopes more gracefully >> during constant expression evaluation. >> >> Only look for a variable's value in the constant expression evaluation >> activation frame, if the variable was indeed declared in that frame, >> otherwise it might be a constant expression and be usable within a nested >> local scope or emit an error. >> >> >> void f(char c) { >> struct X { >> static constexpr char f() { >> return c; // error gracefully here as opposed to crashing. >> } >> }; >> int I = X::f(); >> } >> >> >> Modified: >> cfe/trunk/lib/AST/ExprConstant.cpp >> cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp >> cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp >> cfe/trunk/test/SemaCXX/cxx1z-constexpr-lambdas.cpp >> >> Modified: cfe/trunk/lib/AST/ExprConstant.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=286748&r1=286747&r2=286748&view=diff >> ============================================================================== >> --- cfe/trunk/lib/AST/ExprConstant.cpp (original) >> +++ cfe/trunk/lib/AST/ExprConstant.cpp Sun Nov 13 00:09:16 2016 >> @@ -4803,10 +4803,21 @@ bool LValueExprEvaluator::VisitDeclRefEx >> return Error(E); >> } >> >> + >> bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) { >> CallStackFrame *Frame = nullptr; >> - if (VD->hasLocalStorage() && Info.CurrentCall->Index > 1) >> - Frame = Info.CurrentCall; >> + if (VD->hasLocalStorage() && Info.CurrentCall->Index > 1) { >> + // Only if a local variable was declared in the function currently being >> + // evaluated, do we expect to be able to find its value in the current >> + // frame. (Otherwise it was likely declared in an enclosing context and >> + // could either have a valid evaluatable value (for e.g. a constexpr >> + // variable) or be ill-formed (and trigger an appropriate evaluation >> + // diagnostic)). >> + if (Info.CurrentCall->Callee && >> + Info.CurrentCall->Callee->Equals(VD->getDeclContext())) { >> + Frame = Info.CurrentCall; >> + } >> + } >> >> if (!VD->getType()->isReferenceType()) { >> if (Frame) { >> >> Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=286748&r1=286747&r2=286748&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Sun Nov 13 00:09:16 >> 2016 >> @@ -188,7 +188,7 @@ static void instantiateDependentEnableIf >> >> SmallVector<PartialDiagnosticAt, 8> Diags; >> if (A->getCond()->isValueDependent() && !Cond->isValueDependent() && >> - !Expr::isPotentialConstantExprUnevaluated(Cond, >> cast<FunctionDecl>(Tmpl), >> + !Expr::isPotentialConstantExprUnevaluated(Cond, >> cast<FunctionDecl>(New), >> Diags)) { >> S.Diag(A->getLocation(), diag::err_enable_if_never_constant_expr); >> for (int I = 0, N = Diags.size(); I != N; ++I) >> >> Modified: cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp?rev=286748&r1=286747&r2=286748&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp (original) >> +++ cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp Sun Nov 13 00:09:16 >> 2016 >> @@ -2066,3 +2066,33 @@ namespace InheritedCtor { >> constexpr Z z(1); >> static_assert(z.w == 1 && z.x == 2 && z.y == 3 && z.z == 4, ""); >> } >> + >> + >> +namespace PR28366 { >> +namespace ns1 { >> + >> +void f(char c) { //expected-note2{{declared here}} >> + struct X { >> + static constexpr char f() { //expected-error{{never produces a constant >> expression}} >> + return c; //expected-error{{reference to local}} >> expected-note{{non-const variable}} >> + } >> + }; >> + int I = X::f(); >> +} >> + >> +void g() { >> + const int c = 'c'; >> + static const int d = 'd'; >> + struct X { >> + static constexpr int f() { >> + return c + d; >> + } >> + }; >> + static_assert(X::f() == 'c' + 'd',""); >> +} >> + >> + >> +} // end ns1 >> + >> +} //end ns PR28366 >> + >> >> Modified: cfe/trunk/test/SemaCXX/cxx1z-constexpr-lambdas.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx1z-constexpr-lambdas.cpp?rev=286748&r1=286747&r2=286748&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/cxx1z-constexpr-lambdas.cpp (original) >> +++ cfe/trunk/test/SemaCXX/cxx1z-constexpr-lambdas.cpp Sun Nov 13 00:09:16 >> 2016 >> @@ -46,5 +46,17 @@ namespace ns3 { >> >> } // end ns test_constexpr_call >> >> -#endif // ndef CPP14_AND_EARLIER >> +namespace test_captureless_lambda { >> +void f() { >> + const char c = 'c'; >> + auto L = [] { return c; }; >> + constexpr char C = L(); >> +} >> + >> +void f(char c) { //expected-note{{declared here}} >> + auto L = [] { return c; }; //expected-error{{cannot be implicitly >> captured}} expected-note{{lambda expression begins here}} >> + int I = L(); >> +} >> >> +} >> +#endif // ndef CPP14_AND_EARLIER >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits