------- Comment #4 from jvdelisle at gcc dot gnu dot org 2008-02-15 06:11 ------- Try this, seems to work, though I have not regression tested.
Index: trans-expr.c =================================================================== --- trans-expr.c (revision 132313) +++ trans-expr.c (working copy) @@ -139,8 +139,13 @@ gfc_conv_expr_present (gfc_symbol * sym) || GFC_ARRAY_TYPE_P (TREE_TYPE (decl))); decl = GFC_DECL_SAVED_DESCRIPTOR (decl); } - return build2 (NE_EXPR, boolean_type_node, decl, - fold_convert (TREE_TYPE (decl), null_pointer_node)); + + if (sym->attr.value) + return build2 (NE_EXPR, boolean_type_node, build_fold_addr_expr (decl), + fold_convert (TREE_TYPE (decl), null_pointer_node)); + else + return build2 (NE_EXPR, boolean_type_node, decl, + fold_convert (TREE_TYPE (decl), null_pointer_node)); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35203