The following program results in an ICE: procedure Undefined_Derived_Char is
type Char is new Character; C : Char; begin case C is when XXX => null; when others => null; end case; end Undefined_Derived_Char; It seems that the checks in Sem_Ch8.Find_Direct_Name.Undefined should take into account that Case_Typ can be a type derived from one of the character types: if Is_Enumeration_Type (Case_Typ) and then Case_Typ /= Standard_Character and then Case_Typ /= Standard_Wide_Character and then Case_Typ /= Standard_Wide_Wide_Character then Maybe Is_Enumeration_Type (Case_Typ) and not Is_Character_Type (Case_Typ) is the correct test? -- Summary: ICE on undefined value of type derived from Character Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: ada AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: fw at deneb dot enyo dot de CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20300