PR# 17924 Finalized program with assertions off: random feature call on void target

Problem Report Summary
Submitter: soapy2357
Category: Runtime
Priority: High
Date: 2011/10/29
Class: Bug
Severity: Serious
Number: 17924
Release: 7.0.8.7451 and 6.7.8.5123
Confidential: No
Status: Analyzed
Responsible:
Environment: Linux, 32 bit
Synopsis: Finalized program with assertions off: random feature call on void target

Description
I attached an excerpt of a REAL_96 class (12 bit; Linux's "long double") and a TESTBED class that uses it. The test is a loop that adds 0.001 to the variable and prints it. This works a certain amount of times (e.g. ~34.000 or ~69.000) and then fails with a feature call on void target. REAL_96.mp is Void even though it's created in "default_create".
Disabling the GC or doing "crate Result" for the expanded REAL_96 makes the problem go away (see TESTBED).

This only fails in finalized mode without assertions. Otherwise it works (at least it doesn't crash).
To Reproduce
Run the attached program in finalized mode without assertions.
Problem Report Interactions
From:manus_eiffel    Date:2011/12/09    Status: Analyzed    Download   
I've added eweasel test#expanded011 to cover the case when it was not working with MANAGED_POINTER.

From:soapy2357    Date:2011/10/29    Download   
It seems attachments are not saved (or I just don't see them). So here the two classes in plain text:

class
	TESTBED

create
	make

feature

	make
		local
			r: REAL_96
		do
			--(create {MEMORY}).collection_off -- would work with this
			from until False loop
				r := r + real_96_from_real_64 (0.001)
				Io.put_string (r.out + "%N")
			end
		end

	real_96_from_real_64 (a_value: REAL_64): REAL_96
		do
			--create Result -- would work with this
			Result.set_from_real_64 (a_value)
		end

end

expanded class
	REAL_96

inherit
	ANY
		redefine
			default_create,
			out
		end

feature {NONE}

	default_create
		do
			create mp.make (12)
		end

	mp: MANAGED_POINTER

feature {ANY}

	c_pointer: POINTER
		do
			Result := mp.item
		end

feature {ANY}

	set_from_real_64 (a_value: REAL_64)
		do
			c_set_from_real_64 (c_pointer, a_value)
		end

	plus alias "+" (other: REAL_96): REAL_96
		do
			c_plus (Result.c_pointer, c_pointer, other.c_pointer)
		end

	o
....
Output truncated, Click download to get the full message

From:soapy2357    Date:2011/10/29    Download   
The mentioned testapplication.