http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55692
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |janus at gcc dot gnu.org --- Comment #2 from janus at gcc dot gnu.org 2012-12-14 18:57:09 UTC --- (In reply to comment #1) > Confirmed on 4.4.6, 4.5.3, 4.6.3, 4.7.2, and trunk. I see it also with 4.3.4. Here is a preliminary patch which fixes it on trunk: Index: gcc/fortran/check.c =================================================================== --- gcc/fortran/check.c (revision 194387) +++ gcc/fortran/check.c (working copy) @@ -895,13 +895,11 @@ gfc_check_associated (gfc_expr *pointer, gfc_expr where = &pointer->where; - if (pointer->expr_type == EXPR_VARIABLE || pointer->expr_type == EXPR_FUNCTION) - attr1 = gfc_expr_attr (pointer); - else if (pointer->expr_type == EXPR_NULL) + if (pointer->expr_type == EXPR_NULL) goto null_arg; - else - gcc_assert (0); /* Pointer must be a variable or a function. */ + attr1 = gfc_expr_attr (pointer); + if (!attr1.pointer && !attr1.proc_pointer) { gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER", With this I get: L = ASSOCIATED([P1,P2]) ! Error: intrinsic function ASSOCIATED is not ELEMENTAL 1 Error: 'pointer' argument of 'associated' intrinsic at (1) must be a POINTER ... which, I think, is the proper way to reject the test case (and certainly more polite than an ICE ;)