[all-commits] [llvm/llvm-project] 26bf0b: [clang][Driver] Add a custom error option in multi...

Simon Tatham via All-commits all-commits at lists.llvm.org
Mon Sep 2 08:56:24 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 26bf0b4ae7df7f5350f71afd40a57cdf8f98c588
      https://github.com/llvm/llvm-project/commit/26bf0b4ae7df7f5350f71afd40a57cdf8f98c588
  Author: Simon Tatham <simon.tatham at arm.com>
  Date:   2024-09-02 (Mon, 02 Sep 2024)

  Changed paths:
    M clang/docs/Multilib.rst
    M clang/include/clang/Basic/DiagnosticDriverKinds.td
    M clang/include/clang/Driver/Multilib.h
    M clang/lib/Driver/Driver.cpp
    M clang/lib/Driver/Multilib.cpp
    M clang/lib/Driver/ToolChains/BareMetal.cpp
    M clang/lib/Driver/ToolChains/Fuchsia.cpp
    M clang/lib/Driver/ToolChains/Gnu.cpp
    M clang/lib/Driver/ToolChains/OHOS.cpp
    A clang/test/Driver/baremetal-multilib-custom-error.yaml
    M clang/unittests/Driver/MultilibBuilderTest.cpp
    M clang/unittests/Driver/MultilibTest.cpp
    M clang/unittests/Driver/SimpleDiagnosticConsumer.h

  Log Message:
  -----------
  [clang][Driver] Add a custom error option in multilib.yaml. (#105684)

Sometimes a collection of multilibs has a gap in it, where a set of
driver command-line options can't work with any of the available
libraries.

For example, the Arm MVE extension requires special startup code (you
need to initialize FPSCR.LTPSIZE), and also benefits greatly from
-mfloat-abi=hard. So a multilib provider might build a library for
systems without MVE, and another for MVE with -mfloat-abi=hard,
anticipating that that's what most MVE users would want. But then if a
user compiles for MVE _without_ -mfloat-abi=hard, thhey can't use either
of those libraries – one has an ABI mismatch, and the other will fail to
set up LTPSIZE.

In that situation, it's useful to include a multilib.yaml entry for the
unworkable intermediate situation, and have it map to a fatal error
message rather than a set of actual libraries. Then the user gets a
build failure with a sensible explanation, instead of selecting an
unworkable library and silently generating bad output. The new
regression test demonstrates this case.

This patch introduces extra syntax into multilib.yaml, so that a record
in the `Variants` list can omit the `Dir` key, and in its place, provide
a `FatalError` key. Then, if that variant is selected, the error message
is emitted as a clang diagnostic, and multilib selection fails.

In order to emit the error message in `MultilibSet::select`, I had to
pass a `Driver &` to that function, which involved plumbing one through
to every call site, and in the unit tests, constructing one specially.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list