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
From:manus_eiffel    Date:2008/02/14    Status: Analyzed    Download   
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.