From 66ec48fe704581d1dfc36d7efe80e726684a9b3a Mon Sep 17 00:00:00 2001 From: Antoine ELIAS Date: Wed, 28 Nov 2018 12:30:42 +0100 Subject: [PATCH] Bug 15885 fixed: break in an else block is broken Change-Id: I216373a690e6db435d06b8f1bb05d0a59740a76a --- scilab/modules/ast/src/cpp/ast/runvisitor.cpp | 8 ++-- .../modules/ast/tests/nonreg_tests/bug_15885.tst | 39 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 scilab/modules/ast/tests/nonreg_tests/bug_15885.tst diff --git a/scilab/modules/ast/src/cpp/ast/runvisitor.cpp b/scilab/modules/ast/src/cpp/ast/runvisitor.cpp index 2641228..cb67331 100644 --- a/scilab/modules/ast/src/cpp/ast/runvisitor.cpp +++ b/scilab/modules/ast/src/cpp/ast/runvisitor.cpp @@ -522,8 +522,8 @@ void RunVisitorT::visitprivate(const IfExp &e) throw; } - bool elseIsContinue = e.hasElse() && (&e.getElse())->isContinue(); - if (e.isBreakable() && (elseIsContinue || (&e.getThen())->isBreak())) + bool elseIsBreak = e.hasElse() && (&e.getElse())->isBreak(); + if (e.isBreakable() && (elseIsBreak || (&e.getThen())->isBreak())) { const_cast(&e)->setBreak(); const_cast(&e.getThen())->resetBreak(); @@ -533,6 +533,7 @@ void RunVisitorT::visitprivate(const IfExp &e) } } + bool elseIsContinue = e.hasElse() && (&e.getElse())->isContinue(); if (e.isContinuable() && (elseIsContinue || (&e.getThen())->isContinue())) { const_cast(&e)->setContinue(); @@ -544,8 +545,7 @@ void RunVisitorT::visitprivate(const IfExp &e) } bool elseIsReturn = e.hasElse() && (&e.getElse())->isReturn(); - if (e.isReturnable() - && (elseIsReturn || (&e.getThen())->isReturn())) + if (e.isReturnable() && (elseIsReturn || (&e.getThen())->isReturn())) { const_cast(&e)->setReturn(); const_cast(&e.getThen())->resetReturn(); diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15885.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15885.tst new file mode 100644 index 0000000..8cad6b9 --- /dev/null +++ b/scilab/modules/ast/tests/nonreg_tests/bug_15885.tst @@ -0,0 +1,39 @@ +// ============================================================================= +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) 2018 - ESI - Antoine ELIAS +// +// This file is distributed under the same license as the Scilab package. +// ============================================================================= +// +// <-- CLI SHELL MODE --> +// <-- NO CHECK REF --> +// +// <-- Non-regression test for bug 15885 --> +// +// <-- Bugzilla URL --> +// http://bugzilla.scilab.org/15885 +// +// <-- Short Description --> +// break in an else block is broken + +j = 0; +for i = 1:4 + if %f + else + break + end + j = j + 1; +end + +assert_checktrue(j == 0); + +j = 0; +for i = 1:4 + if %t + break + else + end + j = j + 1; +end + +assert_checktrue(j == 0); -- 1.7.9.5