PR# 15876 Finalizing system with external INTEGER function redefined to constant crashes compiler if inlined
Problem Report Summary
Submitter: prestoat2000
Category: Compiler
Priority: Medium
Date: 2009/05/26
Class: Bug
Severity: Serious
Number: 15876
Release: 6.4.78765
Confidential: No
Status: Closed
Responsible: alexk_es
Environment: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.9.0.10) Gecko/2009042715 Firefox/3.0.10
Solaris 10 on SPARC
Synopsis: Finalizing system with external INTEGER function redefined to constant crashes compiler if inlined
Description
Finalizing a system with an external INTEGER function that is redefined to a constant INTEGER in a descendant class crashes the compiler in {EXTERNAL_B}.sub_enlarged if inlining is enabled. Added eweasel test final081 for this bug.
To Reproduce
Run eweasel test final081.
Problem Report Interactions
Fixed in rev#102989 of EiffelStudio 19.05 intermediate release (beta 19.03).
I think I see what is going wrong here, but again, I don't know how to fix it. The postcondition of {EXTERNAL_B}.enlarged_on is being violated because Result is Void. Stepping through with the debugger reveals that execution reaches this line in that function: Result ?= byte_node (f, a_type_i).enlarged The call to `byte_node' returns a non-Void result, but its type is CONSTANT_B, which does not conform to the type of Result, which is CALL_ACCESS_B. Without knowing anything about how the code works, I thought perhaps the return type should instead be ACCESS_B, but making that change causes a cascade of "redeclaration has non-conforming signature" validity errors, so I gave up at that point. Maybe you already know all that and there is no simple localized fix.