OK, I admit this one is particularly weird. package P is procedure P2; end P;
package body P is type Booleen is new Boolean; for Booleen use (-1, 1); function True return Booleen is begin return False; end True; type B is array (Booleen range False .. True) of Integer; procedure P1 is A : B; begin P2; end P1; procedure P2 is A : B; -- line 20 begin P1; end P2; end P; +===========================GNAT BUG DETECTED==============================+ | 4.3.0 (i686-unknown-linux-gnu) in expand_expr_real_1, at expr.c:7290 | | Error detected around p.adb:20 gnatmake p gcc-4.3 -c p.adb +===========================GNAT BUG DETECTED==============================+ | 4.3.3 (x86_64-pc-linux-gnu) in expand_expr_real_1, at expr.c:7312 | | Error detected around p.adb:20 | -- Summary: ICE in legal program, Boolean type with user-defined function True Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ludovic at ludovic-brenta dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40931