http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46809
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code CC| |burnus at gcc dot gnu.org Summary|[OOP] ICE with -fcheck=all |[OOP] ICE with | |-fcheck=pointer for CLASS | |IS --- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-12-06 07:50:28 UTC --- The relevant option is the check -fcheck=pointer (I have thus updated the summary). Valgrind shows: ==32004== Invalid read of size 4 ==32004== at 0x53F289: trans_runtime_error_vararg (trans.c:400) ==32004== by 0x53FD4B: gfc_trans_runtime_check (trans.c:486) ==32004== by 0x55C2A5: gfc_conv_procedure_call (trans-expr.c:3276) ==32004== by 0x56A33C: gfc_conv_intrinsic_funcall (trans-intrinsic.c:1844) ==32004== by 0x56E5B2: gfc_conv_intrinsic_function (trans-intrinsic.c:6156) ==32004== by 0x55D849: gfc_conv_function_expr (trans-expr.c:3969) The ICE happens for: if (where) line = LOCATION_LINE (where->lb->location); Shorter example: module m type t end type t contains subroutine sub(a) class(t) :: a select type (a) class is (t) print *, 'Hi there' end select end subroutine end The issue seems to be the EXTENDS_TYPE_OF call which is generated for CLASS IS; the call seems to have an "expr->where" defined - but not a where->lb->location.