# HG changeset patch # User anatofuz # Date 1520415393 -32400 # Node ID 53f12981605ac7fefb155c33d3593ace8b5fb888 # Parent dc788094b8e41dd221eb129bd784c004196c8519 Fix goto is environment diff -r dc788094b8e4 -r 53f12981605a tools/clang/include/clang/Basic/TokenKinds.def --- a/tools/clang/include/clang/Basic/TokenKinds.def Tue Mar 06 08:58:23 2018 +0900 +++ b/tools/clang/include/clang/Basic/TokenKinds.def Wed Mar 07 18:36:33 2018 +0900 @@ -311,8 +311,8 @@ #ifndef noCbC // CbC Keywords. KEYWORD(__code , KEYALL) -KEYWORD(__return , KEYALL) -KEYWORD(__environment , KEYALL) +KEYWORD(_CbC_return , KEYALL) +KEYWORD(_CbC_environment , KEYALL) #endif // C++ 2.11p1: Keywords. diff -r dc788094b8e4 -r 53f12981605a tools/clang/lib/Parse/ParseCbC.cpp --- a/tools/clang/lib/Parse/ParseCbC.cpp Tue Mar 06 08:58:23 2018 +0900 +++ b/tools/clang/lib/Parse/ParseCbC.cpp Wed Mar 07 18:36:33 2018 +0900 @@ -421,7 +421,6 @@ return New; } - /// CreateSjForContinuationWithEnv - Create statements of setjmp for continuation with the environment. /// code example: /// if (setjmp(__CbC_environment.env)){ @@ -444,7 +443,8 @@ ArgExprs.push_back(__envExprRes.get()); CondExp = Actions.ActOnCallExpr(getCurScope(), CondExp.get(), Loc, ArgExprs, Loc, 0); - CondExp = Actions.CheckBooleanCondition(Loc, CondExp.get()); + Cond = Actions.ActOnCondition(getCurScope(), Loc, CondExp.get(), Sema::ConditionKind::Boolean); + ParseScope InnerScope(this, Scope::DeclScope,false); SourceLocation InnerStatementTrailingElseLoc; @@ -464,8 +464,7 @@ InnerScope.Exit(); IfScope.Exit(); StmtResult ElseStmt; - bool IsConstexpr = false; - IfRes = Actions.ActOnIfStmt(Loc, IsConstexpr, InitStmt.get(), Cond, ThenStmt.get(),Loc, ElseStmt.get()); + IfRes = Actions.ActOnIfStmt(Loc, false, CondExp.get(), Cond, ThenStmt.get(),Loc, ElseStmt.get()); return IfRes; } diff -r dc788094b8e4 -r 53f12981605a tools/clang/lib/Parse/ParseExpr.cpp --- a/tools/clang/lib/Parse/ParseExpr.cpp Tue Mar 06 08:58:23 2018 +0900 +++ b/tools/clang/lib/Parse/ParseExpr.cpp Wed Mar 07 18:36:33 2018 +0900 @@ -1436,10 +1436,10 @@ break; } #ifndef noCbC - case tok::kw___return: + case tok::kw__CbC_return: Res = Prepare__retForGotoWithTheEnvExpr(); break; - case tok::kw___environment: + case tok::kw__CbC_environment: Res = Prepare__envForGotoWithTheEnvExpr(); break; #endif @@ -2808,10 +2808,10 @@ Expr = ParseBraceInitializer(); } #ifndef noCbC - else if (Tok.is(tok::kw___return)){ + else if (Tok.is(tok::kw__CbC_return)){ Expr = Prepare__retForGotoWithTheEnvExpr(); } - else if (Tok.is(tok::kw___environment)){ + else if (Tok.is(tok::kw__CbC_environment)){ Expr = Prepare__envForGotoWithTheEnvExpr(); } else if (Tok.is(tok::identifier) && NeedPrototypeDeclaration(Tok)){ // check code segment declaration.