[PATCH] D143059: [Driver] Enable selecting multiple multilibs
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGedc1130c0ac0: [Driver] Enable selecting multiple multilibs (authored by michaelplatings). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/OHOS.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -355,7 +355,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -371,7 +371,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -386,7 +386,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -399,7 +399,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -413,18 +413,18 @@ Flags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -438,11 +438,11 @@ Flags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix());
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 529566. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/OHOS.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -355,7 +355,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -371,7 +371,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -386,7 +386,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -399,7 +399,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -413,18 +413,18 @@ Flags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -438,11 +438,11 @@ Flags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix());
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
phosek accepted this revision. phosek added a comment. LGTM Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 529316. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/OHOS.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -355,7 +355,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -371,7 +371,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -386,7 +386,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -399,7 +399,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -413,18 +413,18 @@ Flags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -438,11 +438,11 @@ Flags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix());
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 529017. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/OHOS.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -357,7 +357,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -373,7 +373,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -388,7 +388,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -401,7 +401,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -415,18 +415,18 @@ MatchFlags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -440,11 +440,11 @@ MatchFlags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix());
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 519002. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/OHOS.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -373,7 +373,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -389,7 +389,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -404,7 +404,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -417,7 +417,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -431,18 +431,18 @@ MatchFlags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -456,11 +456,11 @@ MatchFlags: [-mfloat-abi=soft] )")); MS.select({"-mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"-mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix());
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 508039. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/OHOS.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -383,7 +383,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -402,7 +402,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -418,7 +418,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -432,7 +432,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -453,18 +453,18 @@ NoMatchFlags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -485,11 +485,11 @@ NoMatchFlags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"},
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 505288. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flags_list Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flags_list Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -367,7 +367,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -386,7 +386,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -402,7 +402,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -416,7 +416,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -437,18 +437,18 @@ NoMatchFlags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -469,11 +469,11 @@ NoMatchFlags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h",
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 505051. michaelplatings added a comment. tags->flags Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::flag_set Flags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Flags1, Selection1)) << "Flag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::flag_set Flags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Flags2, Selection2)) << "Flag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -384,7 +384,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -403,7 +403,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -419,7 +419,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -433,7 +433,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -454,18 +454,18 @@ NoMatchFlags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -486,11 +486,11 @@ NoMatchFlags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h",
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 504774. michaelplatings added a comment. Rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::tag_set Tags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Tags1, Selection1)) << "Tag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::tag_set Tags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Tags2, Selection2)) << "Tag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -383,7 +383,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -402,7 +402,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -418,7 +418,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -432,7 +432,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -453,18 +453,18 @@ NoMatchTags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parseYaml(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -485,11 +485,11 @@ NoMatchTags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); +
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
peter.smith accepted this revision. peter.smith added a comment. This revision is now accepted and ready to land. I've set approved from the Arm side. Please leave some time for people in the US time zone to leave any final comments or ask for extensions. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D143059: [Driver] Enable selecting multiple multilibs
michaelplatings updated this revision to Diff 503904. michaelplatings added a comment. flags -> tags Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143059/new/ https://reviews.llvm.org/D143059 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/Multilib.cpp clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/CSKYToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Gnu.h clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hurd.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/MipsLinux.cpp clang/lib/Driver/ToolChains/RISCVToolchain.cpp clang/test/Driver/fuchsia.cpp clang/unittests/Driver/MultilibBuilderTest.cpp clang/unittests/Driver/MultilibTest.cpp Index: clang/unittests/Driver/MultilibTest.cpp === --- clang/unittests/Driver/MultilibTest.cpp +++ clang/unittests/Driver/MultilibTest.cpp @@ -154,18 +154,18 @@ Multilib("/bar", {}, {}, {"+bar"}), }); Multilib::tag_set Tags1 = {"+foo", "-bar"}; - Multilib Selection1; + llvm::SmallVector Selection1; ASSERT_TRUE(MS.select(Tags1, Selection1)) << "Tag set was {\"+foo\"}, but selection not found"; - ASSERT_TRUE(Selection1.gccSuffix() == "/foo") - << "Selection picked " << Selection1 << " which was not expected"; + ASSERT_TRUE(Selection1.back().gccSuffix() == "/foo") + << "Selection picked " << Selection1.back() << " which was not expected"; Multilib::tag_set Tags2 = {"+foo", "+bar"}; - Multilib Selection2; + llvm::SmallVector Selection2; ASSERT_TRUE(MS.select(Tags2, Selection2)) << "Tag set was {\"+bar\"}, but selection not found"; - ASSERT_TRUE(Selection2.gccSuffix() == "/bar") - << "Selection picked " << Selection2 << " which was not expected"; + ASSERT_TRUE(Selection2.back().gccSuffix() == "/bar") + << "Selection picked " << Selection2.back() << " which was not expected"; } TEST(MultilibTest, SelectMultiple) { @@ -173,17 +173,17 @@ Multilib("/a", {}, {}, {"x"}), Multilib("/b", {}, {}, {"y"}), }); - std::vector Selection; + llvm::SmallVector Selection; - Selection = MS.select({"x"}); + ASSERT_TRUE(MS.select({"x"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); - Selection = MS.select({"y"}); + ASSERT_TRUE(MS.select({"y"}, Selection)); ASSERT_EQ(1u, Selection.size()); EXPECT_EQ("/b", Selection[0].gccSuffix()); - Selection = MS.select({"y", "x"}); + ASSERT_TRUE(MS.select({"y", "x"}, Selection)); ASSERT_EQ(2u, Selection.size()); EXPECT_EQ("/a", Selection[0].gccSuffix()); EXPECT_EQ("/b", Selection[1].gccSuffix()); @@ -382,7 +382,7 @@ TEST(MultilibTest, SelectSoft) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parse(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -401,7 +401,7 @@ TEST(MultilibTest, SelectSoftFP) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parse(MS, YAML_PREAMBLE R"( Variants: - Dir: f @@ -417,7 +417,7 @@ // If hard float is all that's available then select that only if compiling // with hard float. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parse(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -431,7 +431,7 @@ TEST(MultilibTest, SelectFloatABI) { MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parse(MS, YAML_PREAMBLE R"( Variants: - Dir: s @@ -452,18 +452,18 @@ NoMatchTags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/f", Selected.gccSuffix()); + EXPECT_EQ("/f", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h", Selected.back().gccSuffix()); } TEST(MultilibTest, SelectFloatABIReversed) { // If soft is specified after softfp then softfp will never be // selected because soft is compatible with softfp and last wins. MultilibSet MS; - Multilib Selected; + llvm::SmallVector Selected; ASSERT_TRUE(parse(MS, YAML_PREAMBLE R"( Variants: - Dir: h @@ -484,11 +484,11 @@ NoMatchTags: [hasfp] )")); MS.select({"mfloat-abi=soft"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=softfp"}, Selected); - EXPECT_EQ("/s", Selected.gccSuffix()); + EXPECT_EQ("/s", Selected.back().gccSuffix()); MS.select({"mfloat-abi=hard"}, Selected); - EXPECT_EQ("/h", Selected.gccSuffix()); + EXPECT_EQ("/h",