PR# 18028 Inlining routine with two "across" loops inside other loops causes wrong execution result

Problem Report Summary
Submitter: prestoat2000
Category: Compiler
Priority: High
Date: 2011/12/01
Class: Bug
Severity: Serious
Number: 18028
Release: 7.0.88046
Confidential: No
Status: Closed
Responsible:
Environment: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.9.0.10) Gecko/2009042715 Firefox/3.0.10 Solaris 10 on x86
Synopsis: Inlining routine with two "across" loops inside other loops causes wrong execution result

Description
A routine that has two "across" loops:

   print (across list as d some d.item = 29 end); io.new_line
   print (across list as c all c.item = 47 end); io.new_line

which are in the body of a set of nested standard-style loops
produces incorrect results when the system is finalized with inlining.
The outer loop is supposed to execute 2 times and the inner loop 3 times,
for a total of 6 iterations of the above code.  When the system is
finalized with inlining, only one iteration occurs.

Note that the C compilation of the finalized-with-inlining code produces
some warnings:

"te10.c", line 89: warning: improper pointer/integer combination: op "="
"te10.c", line 93: warning: improper pointer/integer combination: arg #1

This seems like a fairly serious bug, since everything appears to go well
(compiler doesn't crash), unless one notices the C compiler warnings.
Too bad I didn't find this before 7.0 was done.  However, this won't
affect us because we don't use "across" loops yet.

Added test final114 for this bug.


To Reproduce
Run test final114.
Problem Report Interactions
From:alexk_es    Date:2016/03/11    Status: Closed    Download   
Fixed in rev#98561 of EiffelStudio 16.05 intermediate release.