From patchwork Sat Jul 24 13:52:43 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [RFA,Fortran,try,11] Emulated tls rewrite Date: Sat, 24 Jul 2010 03:52:43 -0000 From: Richard Guenther X-Patchwork-Id: 59855 Message-Id: To: Jan Hubicka Cc: Richard Henderson , Jack Howarth , IainS , GCC Patches , Jakub Jelinek , jh@suse.cz On Sat, Jul 24, 2010 at 11:54 AM, Jan Hubicka wrote: > Am Sat 24 Jul 2010 01:11:31 AM CEST schrieb Richard Henderson > : > >> On 07/21/2010 07:32 PM, Jack Howarth wrote: >>> >>> FAIL: gfortran.dg/gomp/appendix-a/a.22.6.f90  -O  (test for excess >>> errors) >>> Excess errors: >>> .../testsuite/gfortran.dg/gomp/appendix-a/a.22.6.f90:4:0: sorry, >>>  unimplemented: thread-local COMMON data not implemented >> >> I managed to reproduce this problem reliably.  It has to do with the >> Fortran >> front end (indirectly) invoking varpool_finalize_decl much later than the >> C >> front ends do.  Without the decls being finalized, the IPA pass doesn't >> get >> to see them and they don't get lowered. >> >> I talked to Richi about this ordering problem on IRC, and changing the >> generic ordering of decls vs compilation unit finalization appears to run >> into problems with C++ and Java and their aliases.  An acceptable solution >> appears to be to hack the Fortran front end to do it by hand. > > Hmm, I wanted to get decl finalization out of wrapup_global_decls for a > while but never got around it.  What are those problems with aliases? Apply (basically move it after /* Generate hidden aliases for Java. */) and enjoy libjava exploding. Richard. > Honza > > Index: decl2.c =================================================================== --- decl2.c (revision 162499) +++ decl2.c (working copy) @@ -3921,8 +3921,6 @@ cp_write_global_declarations (void) /* Collect candidates for Java hidden aliases. */ candidates = collect_candidates_for_java_method_aliases (); - cgraph_finalize_compilation_unit (); - /* Now, issue warnings about static, but not defined, functions, etc., and emit debugging information. */ walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider); @@ -3968,6 +3966,8 @@ cp_write_global_declarations (void) #ifdef ENABLE_CHECKING validate_conversion_obstack (); #endif /* ENABLE_CHECKING */ + + cgraph_finalize_compilation_unit (); } /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the