It looks like when transitioning to using target and optimization option nodes for compile-time to link-time option streaming you didn't adjust lto-opts.c nor lto-wrapper.c. The following fixes the target option side (for SWITCHABLE_TARGET). Do not record any target options in the lto_opts section.
Honza - I suppose we don't have any testcase that this works, I'll try to come up with sth. This also looks like a correctness issue to me. We can do similar changes for optimize options, now, for all targets, no? Thanks, Richard. 2015-04-23 Richard Biener <rguent...@suse.de> * lto-opts.c (lto_write_options): Do not record target options if we are targeting a SWITCHABLE_TARGET target. We use target options on functions to transfer target flags from compile to link time. Index: gcc/lto-opts.c =================================================================== *** gcc/lto-opts.c (revision 222360) --- gcc/lto-opts.c (working copy) *************** lto_write_options (void) *** 219,224 **** --- 219,230 ---- && lto_stream_offload_p) continue; + /* Do not store target-specific options if we target a + SWITCHABLE_TARGET target. */ + if ((cl_options[option->opt_index].flags & CL_TARGET) + && SWITCHABLE_TARGET) + continue; + /* Drop options created from the gcc driver that will be rejected when passed on to the driver again. */ if (cl_options[option->opt_index].cl_reject_driver)