This is an archive of the discontinued LLVM Phabricator instance.

Make joined instances of JoinedOrSeparate flags point to the unaliased args, like all other arg types do
ClosedPublic

Authored by thakis on Jul 3 2019, 1:25 PM.

Details

Summary

This fixes an 8-year-old regression. r105763 made it so that aliases always refer to the unaliased option – but it missed the "joined" branch of JoinedOrSeparate flags. (r162231 then made the Args classes non-virtual, and r169344 moved them from clang to llvm.)

Back then, there was no JoinedOrSeparate flag that was an alias, so it wasn't observable. Now /U in CLCompatOptions is a JoinedOrSeparate alias in clang, and warn_slash_u_filename incorrectly used the aliased arg id (using the unaliased one isn't really a regression since that warning checks if the undefined macro contains slash or backslash and only then emits the warning – and no valid use will pass "-Ufoo/bar" or similar).

Also, lld has many JoinedOrSeparate aliases, and due to this bug it had to explicitly call getUnaliasedOption() in a bunch of places, even though that shouldn't be necessary by design. After this fix in Option, these calls really don't have an effect any more, so remove them.

No intended behavior change.

(I accidentally fixed this bug while working on PR29106 but then wondered why the warn_slash_u_filename broke. When I figured it out, I thought it would make sense to land this in a separate commit.)

Diff Detail

Repository
rL LLVM

Event Timeline

thakis created this revision.Jul 3 2019, 1:25 PM
Herald added a project: Restricted Project. · View Herald Transcript
thakis added a comment.Jul 4 2019, 1:31 PM

ruiu: ping

ruiu accepted this revision.Jul 5 2019, 4:38 AM

LGTM

This revision is now accepted and ready to land.Jul 5 2019, 4:38 AM
This revision was automatically updated to reflect the committed changes.