public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "burnus at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/41298] wrong-code: Default initializer C_NULL_PTR ignored Date: Tue, 08 Sep 2009 16:07:00 -0000 [thread overview] Message-ID: <20090908160650.13028.qmail@sourceware.org> (raw) In-Reply-To: <bug-41298-13404@http.gcc.gnu.org/bugzilla/> ------- Comment #1 from burnus at gcc dot gnu dot org 2009-09-08 16:06 ------- Regarding the initialization: Initializing proc pointers and pointers works. The first time one hits gfc_conv_structure, one has: expr->expr_type == EXPR_STRUCTURE for the type expr->ts->u.derived->name == "fgsl_file". If one drills deeper, one finds another expr->value.constructor->expr->expr_type == EXPR_STRUCTURE this time as expected of the type expr->value.constructor->expr->ts->u.derived->name == "c_ptr" So far so good. Now one just needs to have an EXPR_NULL or EXPR_VARIABLE or something like that -- but: expr->value.constructor->expr->value.constructor->expr == NULL However, in gfc_conv_structure: for (c = expr->value.constructor; c; c = c->next, cm = cm->next) { if (!c->expr || cm->attr.allocatable) continue; It shouldn't be NULL; if it weren't one could enter gfc_conv_initializer and could enter there: if (expr != NULL && expr->ts.type == BT_DERIVED && expr->ts.is_iso_c && expr->ts.u.derived) expr = gfc_int_expr (0); Thus the question is: Why is the last expr == NULL and not EXPR_VARIABLE of flavour FL_PARAMETER? * * * Another question: Why is there an if (file != 0) I think it should always be true, unless sym is explicitly marked as optional. Thus the following gives a nanosecond speed up and saves five bytes or so in the file size (untested): Index: trans-decl.c =================================================================== --- trans-decl.c (revision 151512) +++ trans-decl.c (working copy) @@ -2992,7 +2992,7 @@ gfc_init_default_dt (gfc_symbol * sym, t gfc_set_sym_referenced (sym); e = gfc_lval_expr_from_sym (sym); tmp = gfc_trans_assignment (e, sym->value, false); - if (sym->attr.dummy) + if (sym->attr.dummy && sym->attr.optional) { present = gfc_conv_expr_present (sym); tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, @@ -3030,9 +3030,12 @@ init_intent_out_dt (gfc_symbol * proc_sy f->sym->backend_decl, f->sym->as ? f->sym->as->rank : 0); - present = gfc_conv_expr_present (f->sym); - tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, - tmp, build_empty_stmt (input_location)); + if (f->sym->attr.optional) + { + present = gfc_conv_expr_present (f->sym); + tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, + tmp, build_empty_stmt (input_location)); + } gfc_add_expr_to_block (&fnblock, tmp); } -- burnus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|wrong-code: Default |wrong-code: Default |initializer ignored |initializer C_NULL_PTR | |ignored http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41298
next prev parent reply other threads:[~2009-09-08 16:07 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-09-07 16:24 [Bug fortran/41298] New: wrong-code: Default initializer ignored burnus at gcc dot gnu dot org 2009-09-08 16:07 ` burnus at gcc dot gnu dot org [this message] 2009-09-09 20:42 ` [Bug fortran/41298] wrong-code: Default initializer C_NULL_PTR ignored mikael at gcc dot gnu dot org 2009-09-10 1:09 ` jvdelisle at gcc dot gnu dot org 2009-09-10 2:44 ` kargl at gcc dot gnu dot org 2009-12-13 16:22 ` dfranke at gcc dot gnu dot org 2010-01-06 21:49 ` burnus at gcc dot gnu dot org 2010-01-09 9:12 ` burnus at gcc dot gnu dot org 2010-01-09 9:12 ` burnus at gcc dot gnu dot org 2010-02-07 4:02 ` hjl dot tools at gmail dot com
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20090908160650.13028.qmail@sourceware.org \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).