PR# 19532 Wrong generated C code in finalized mode

Problem Report Summary
Submitter: gobobe
Category: Compiler
Priority: High
Date: 2019/03/10
Class: Bug
Severity: Critical
Number: 19532
Release: 19.02.10.2945
Confidential: No
Status: Closed
Responsible: alexk_es
Environment: win
Synopsis: Wrong generated C code in finalized mode

Description
When compiling the following system in finalized mode:

~~~~~~~~~~~~~~~~~~~~~~
class A

create

	make

feature

	make
		local
			c1, c2: C
			b: BOOLEAN
		do
			create c1
			create c2
			b := c1 <= c2
		end

end
~~~~~~~~~~~~~~~~~~~~~~
deferred class B

feature

	is_less_equal alias "<=" (other: like Current): BOOLEAN
		do
			Result := is_less (other) or is_equal (other)
		end
		
	is_less (other: like Current): BOOLEAN
		deferred
		end
		
end
~~~~~~~~~~~~~~~~~~~~~~
class C

inherit

	B
		redefine
			is_equal
		end

feature

	is_less (other: like Current): BOOLEAN
		do
			print ("C.is_less%N")
		end

	is_equal (other: like Current): BOOLEAN
		do
			print ("C.is_equal%N")
		end
		
end
~~~~~~~~~~~~~~~~~~~~~~

I get this output:

~~~~~~~~~~~~~~~~~~~~~~
C.is_less
~~~~~~~~~~~~~~~~~~~~~~

I was expecting {C}.is_equal to be called. Looking at the C code generated for {B}.is_less_equal:

~~~~~~~~~~~~~~~~~~~~~~
	Result = '\01';
	if (!F33_503(Current, arg1)) {
		Result = (EIF_BOOLEAN) eif_builtin_ANY_is_equal (Current, arg1);
	}
~~~~~~~~~~~~~~~~~~~~~~

We can see that it's {ANY}.is_equal which is called, not {C}.is_equal.

--
Eric Bezault
To Reproduce

										
Problem Report Interactions
From:alexk_es    Date:2019/03/21    Status: Closed    Download   
Fixed in rev#102989 of EiffelStudio 19.05 intermediate release (beta 19.03).

From:alexk_es    Date:2019/03/12    Status: Analyzed    Download   
Added eweasel test#final127.