> > * ipa-inline-transform.c (inline_call): Drop -fstrict-aliasing when > > inlining -fno-strict-aliasing into -fstrict-aliasing body. > > * gcc.dg/lto/alias-1_0.c: New testcase. > > * gcc.dg/lto/alias-1_1.c: New testcase. > >Index: ipa-inline-transform.c > >=================================================================== > >--- ipa-inline-transform.c (revision 231081) > >+++ ipa-inline-transform.c (working copy) > >@@ -322,6 +322,21 @@ inline_call (struct cgraph_edge *e, bool > > if (DECL_FUNCTION_PERSONALITY (callee->decl)) > > DECL_FUNCTION_PERSONALITY (to->decl) > > = DECL_FUNCTION_PERSONALITY (callee->decl); > >+ if (!opt_for_fn (callee->decl, flag_strict_aliasing) > >+ && opt_for_fn (to->decl, flag_strict_aliasing)) > > Just curious why you don't handle the other way round?
After inlining, opt_for_fn of CALLEE will be ignored and will become opt_for_fn of TO. Turning flag_strict_alising code to !flag_strict_aliasing is safe, but not the other way around. > > >+ { > >+ struct gcc_options opts = global_options; > >+ > >+ cl_optimization_restore (&opts, > >+ TREE_OPTIMIZATION (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl))); > >+ opts.x_flag_strict_aliasing = false; > >+ if (dump_file) > >+ fprintf (dump_file, "Dropping flag_strict_aliasing on %s:%i\n", > >+ to->name (), to->order); > > ISTR to have seen %s/%i for printing name and order in IPA, no? Hmm, right, will update it. > >+void link_error (void); > > Unused and unneeded forward decl? Yep, I originally wanted to check that we optimize out the type punned code (we can) but we don't seem to be able to do so. It is just a testcase and extra declaration is harmless I guess. Thanks! Honza