* Bug 16264 fixed: now after empty loop iterator is empty 45/21145/5
St├ęphane MOTTELET [Tue, 3 Dec 2019 12:29:26 +0000 (13:29 +0100)]
http://bugzilla.scilab.org/show_bug.cgi?id=16264

Change-Id: I6aa282aa795b85d44aefd722ad24fabad1c0e54a

scilab/CHANGES.md
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/tests/nonreg_tests/bug_16264.tst [new file with mode: 0644]

index 33d3866..6a50f05 100644 (file)
@@ -188,4 +188,5 @@ Bug Fixes
 * [#16174](http://bugzilla.scilab.org/show_bug.cgi?id=16174): `libraryinfo` yielded 0x0 matrix of strings for libs without macro
 * [#16208](http://bugzilla.scilab.org/show_bug.cgi?id=16208): Using 3D string matrix with old C-api gateways may crash Scilab.
 * [#16209](http://bugzilla.scilab.org/show_bug.cgi?id=16209): grand() causes a freeze after several consecutive calls when using default base generator.
+* [#16264](http://bugzilla.scilab.org/show_bug.cgi?id=16264): After empty for loop iterator was left uninitialized.
 
index dc7d63d..458f119 100644 (file)
@@ -759,6 +759,11 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
             }
         }
 
+        if (size == 0)
+        {
+            ctx->put(var, types::Double::Empty());
+        }
+
         //unlock loop index
         pIL->DecreaseRef();
         pIL->killMe();
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_16264.tst b/scilab/modules/ast/tests/nonreg_tests/bug_16264.tst
new file mode 100644 (file)
index 0000000..c9ce829
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 16144 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16@^$
+//
+// <-- Short Description -->
+// Unexpected iterator assigment in empty for loop
+
+for k = 1:0;end
+assert_checktrue(isempty(k))
+