[PATCH] D27477: Refactor how the MSVC toolchain searches for a compatibility version.

David L. Jones via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 6 12:02:56 PST 2016


dlj created this revision.
dlj added reviewers: rnk, hans, compnerd, llvm-commits.

The MSVC toolchain and Clang driver combination currently uses a fairly complex
sequence of steps to determine the MS compatibility version to pass to cc1.
There is some oddness in this sequence currently, with some code which inspects
flags in the toolchain, and some code which inspects the triple and local
environment in the driver code.

This change is an attempt to consolidate most of this logic so that
Win32-specific code lives in MSVCToolChain.cpp. I'm not 100% happy with the
split, so any suggestions are welcome.

There are a few things you might want to watch for for specifically:

- The fallback sequence should be the same as before, but is now consolidated into MSVCToolChain::getMSVCVersion:
  - If flags are provided (and valid), use those.
  - Otherwise, try to use the Triple.
  - Otherwise, on Windows, check the executable.
  - Otherwise, on Windows or with --fms-extensions, default to 18.
  - Otherwise, we can't determine the version.
- MSVCToolChain::ComputeEffectiveTriple no longer calls the base ToolChain::ComputeEffectiveClangTriple. The only thing it would change for Windows the architecture, which we don't care about for the compatibility version.
  - I'm not sure whether this is philosophically correct (but it should be easy to add back to MSVCToolChain::getMSVCVersionFromTriple if not).
  - Previously, Tools.cpp just called getTriple() anyhow, so it doesn't look like the effective triple was always being used previously anyhow.


https://reviews.llvm.org/D27477

Files:
  include/clang/Driver/ToolChain.h
  lib/Driver/MSVCToolChain.cpp
  lib/Driver/ToolChains.h
  lib/Driver/Tools.cpp
  lib/Driver/Tools.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27477.80461.patch
Type: text/x-patch
Size: 10397 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161206/74f00ca2/attachment.bin>


More information about the llvm-commits mailing list