PR# 13798 Crash when removing an overriden class
Problem Report Summary
Submitter: manus_eiffel
Category: Compiler
Priority: Medium
Date: 2007/12/20
Class: Bug
Severity: Serious
Number: 13798
Release: 6.1.7.1477
Confidential: No
Status: Analyzed
Responsible:
Environment: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Synopsis: Crash when removing an overriden class
Description
In commit rev#71590, we removed TYPE_A from the parser library since not used. It was overridden by the compiler. When recompiling the compiler, the compiler crashed with the trace below. The workaround was to remove TYPE_A from the override cluster (see rev#71591) and then compile. Looks like the configuration system was confused and reported a class removal when it should not. [ 18% - 120] Degree 4 class FEAT_ARG ISE Eiffel: Session aborted Exception tag: ec: system execution failed. Following is the set of recorded exceptions: ******************************** Thread exception ***************************** In thread Root thread 0x0 (thread id) ******************************************************************************* ------------------------------------------------------------------------------- Class / Object Routine Nature of exception Effect ------------------------------------------------------------------------------- CL_TYPE_A is_expanded @1 <0000000002721668> Feature call on void target. Exit ------------------------------------------------------------------------------- CL_TYPE_A is_expanded @1 <0000000002721668> Routine failure. Exit ------------------------------------------------------------------------------- CL_TYPE_A is_attached @1 <0000000002721668> (From ATTACHABLE_TYPE_A) Routine failure. Exit ------------------------------------------------------------------------------- CL_TYPE_A is_equivalent @1 <0000000006CB7EB8> Routine failure. Exit ------------------------------------------------------------------------------- LIKE_FEATURE equivalent @4 <0000000002702D98> (From TYPE_A) Routine failure. Exit ------------------------------------------------------------------------------- LIKE_FEATURE is_equivalent @1 <0000000002702D98> Routine failure. Exit ------------------------------------------------------------------------------- GEN_TYPE_A equivalent @4 <0000000002702D28> (From TYPE_A) Routine failure. Exit ------------------------------------------------------------------------------- GEN_TYPE_A is_equivalent @8 <0000000002702D28> Routine failure. Exit ------------------------------------------------------------------------------- DYN_PROC_I same_signature @7 <0000000002702C38> (From FEATURE_I) Routine failure. Exit ------------------------------------------------------------------------------- DYN_PROC_I equiv @1 <0000000002702C38> (From FEATURE_I) Routine failure. Exit ------------------------------------------------------------------------------- FEATURE_TABLE equiv @18 <000000000271CD48> Routine failure. Exit ------------------------------------------------------------------------------- INHERIT_TABLE pass2 @92 <0000000008C70338> Routine failure. Exit ------------------------------------------------------------------------------- DEGREE_4 process_class @11 <0000000006435F58> Routine failure. Exit ------------------------------------------------------------------------------- DEGREE_4 execute @31 <0000000006435F58> Routine failure. Exit ------------------------------------------------------------------------------- SYSTEM_I process_degree_4 @1 <000000000993BA38> Routine failure. Exit ------------------------------------------------------------------------------- SYSTEM_I do_recompilation @45 <000000000993BA38> Routine failure. Exit ------------------------------------------------------------------------------- SYSTEM_I recompile @6 <000000000993BA38> Routine failure. Exit ------------------------------------------------------------------------------- WORKBENCH_I recompile @23 <0000000003B0EF08> Routine failure. Exit ------------------------------------------------------------------------------- E_PROJECT melt @6 <0000000003B07DF8> Routine failure. Exit ------------------------------------------------------------------------------- E_PROJECT quick_melt @3 <0000000003B07DF8> Routine failure. Exit ------------------------------------------------------------------------------- EWB_QUICK_MELT perform_compilation @1 <000000000996DC68> Routine failure. Exit ------------------------------------------------------------------------------- EWB_QUICK_MELT compile @3 <000000000996DC68> (From EWB_COMP) Routine failure. Exit ------------------------------------------------------------------------------- EWB_QUICK_MELT execute @6 <000000000996DC68> (From EWB_COMP) Routine failure. Exit ------------------------------------------------------------------------------- ES execute @43 <000000000311BE18> Routine failure. Exit ------------------------------------------------------------------------------- ES make @8 <000000000311BE18> Routine failure. Exit ------------------------------------------------------------------------------- ES root's creation <000000000311BE18> Routine failure. Exit -------------------------------------------------------------------------------
To Reproduce
Compile at rev#71589, update to rev#71590 to get the crash. Updating to rev#71591 does not trigger the crash.
Problem Report Interactions
I got a similar crash today and there is an easy solution here. What is happening is that we are not checking that the old signature is still valid for the new compilation (valid in the sense of {TYPE_A}.is_valid). So an easy solution would be to check that before performing checking the type equivalence in {FEATURE_I}.same_signature. I will do the above after building an eweasel test exhibiting the problem.