https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121412
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #3) > -msve-vector-bits is not specially handled in lto-wrapper and thus it will > go the "default" and ferry that over to the link command. > > The flag should get into the function-specific target attribute but global > vars can be affected which is likely the issue here. /* The following does what the old LTO option code did, union all target and a selected set of common options. */ for (i = 0; i < fdecoded_options.length (); ++i) { ... default: if (!(cl_options[foption->opt_index].flags & CL_TARGET)) break; ... /* Do what the old LTO code did - collect exactly one option setting per OPT code, we pick the first we encounter. ??? This doesn't make too much sense, but when it doesn't then we should complain. */ if (existing_opt == -1) decoded_options.safe_push (*foption); break; that also means if you have "conflicting" -msve-vector-bits=... the first one wins.