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/40873] -fwhole-file -fwhole-program: Wrong decls cause too much to be optimized away
Date: Sat, 24 Jul 2010 19:13:00 -0000	[thread overview]
Message-ID: <20100724191343.12031.qmail@sourceware.org> (raw)
In-Reply-To: <bug-40873-13404@http.gcc.gnu.org/bugzilla/>



------- Comment #18 from burnus at gcc dot gnu dot org  2010-07-24 19:13 -------
(In reply to comment #17)
> comment 1 still fails with current trunk

(In reply to comment #1)
>       subroutine two()
>         call three()
>       end subroutine two
>
>       subroutine three()
>       end subroutine three

The problem is that one first generates code for "two" and thus calls
  gfc_get_extern_function_decl
to generate the decl for "three" - there is no existing declaration. As next
step, one works on "three" and calls
   gfc_create_function_decl
which creates another declaration.


The test case in comment 1 and the one in comment 16 (with the bogus "use demo"
comment out) worked with an initial version of the following patch. However, it
give an ICE for the test in comment 4:
22.f90:5:0: internal compiler error: in build_function_decl, at
fortran/trans-decl.c:1599

The solution was to make the newly generated procedure as global - which it
surely is - otherwise, it were not accessible.

Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c    (Revision 162502)
+++ gcc/fortran/trans-decl.c    (Arbeitskopie)
@@ -1411,9 +1411,19 @@ gfc_get_extern_function_decl (gfc_symbol
        && !sym->attr.use_assoc
        && !sym->backend_decl
        && gsym && gsym->ns
-       && ((gsym->type == GSYM_SUBROUTINE) || (gsym->type == GSYM_FUNCTION))
-       && gsym->ns->proc_name->backend_decl)
+       && ((gsym->type == GSYM_SUBROUTINE) || (gsym->type == GSYM_FUNCTION)))
     {
+      if (!gsym->ns->proc_name->backend_decl)
+       {
+         tree save_fn_decl = current_function_decl;
+         /* By construction, the external function cannot be
+            a contained procedure.  */
+         current_function_decl = NULL_TREE;
+         gfc_create_function_decl (gsym->ns);
+         current_function_decl = save_fn_decl;
+         gcc_assert (gsym->ns->proc_name->backend_decl);
+       }
+
       /* If the namespace has entries, the proc_name is the
         entry master.  Find the entry and use its backend_decl.
         otherwise, use the proc_name backend_decl.  */


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|pault at gcc dot gnu dot org|burnus at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40873


  parent reply	other threads:[~2010-07-24 19:13 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-27 13:57 [Bug fortran/40873] New: " burnus at gcc dot gnu dot org
2009-07-27 14:47 ` [Bug fortran/40873] " burnus at gcc dot gnu dot org
2009-07-28 13:12 ` rguenth at gcc dot gnu dot org
2009-09-22 15:34 ` rguenth at gcc dot gnu dot org
2009-09-22 15:42 ` rguenth at gcc dot gnu dot org
2010-05-15 19:54 ` dominiq at lps dot ens dot fr
2010-05-16 10:53 ` rguenth at gcc dot gnu dot org
2010-05-16 11:01 ` dominiq at lps dot ens dot fr
2010-05-16 11:04 ` rguenther at suse dot de
2010-05-16 11:17 ` dominiq at lps dot ens dot fr
2010-05-16 11:21 ` rguenther at suse dot de
2010-05-20 13:51 ` pault at gcc dot gnu dot org
2010-05-24 12:32 ` pault at gcc dot gnu dot org
2010-05-26 14:28 ` burnus at gcc dot gnu dot org
2010-05-26 14:41 ` dominiq at lps dot ens dot fr
2010-05-26 14:46 ` burnus at gcc dot gnu dot org
2010-06-09 22:10 ` fxcoudert at gcc dot gnu dot org
2010-07-24 18:15 ` jv244 at cam dot ac dot uk
2010-07-24 19:13 ` burnus at gcc dot gnu dot org [this message]
2010-07-24 20:16 ` burnus at gcc dot gnu dot org
2010-07-24 22:05 ` burnus at gcc dot gnu dot org
2010-07-25 10:03 ` dominiq at lps dot ens dot fr
2010-07-25 10:14 ` burnus at gcc dot gnu dot org
2010-07-26 13:25 ` burnus at gcc dot gnu dot org
2010-07-26 17:02 ` dominiq at lps dot ens dot fr
2010-07-26 17:04 ` burnus at gcc dot gnu dot org
2010-07-26 21:00 ` dominiq at lps dot ens dot fr
2010-07-27  8:44 ` burnus at gcc dot gnu dot org
2010-07-27  8:46 ` burnus at gcc dot gnu dot org

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=20100724191343.12031.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: link
Be 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).