From 6b3544eb1d109dfc5d24a3a77f5496c4a6edd341 Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Thu, 3 Jul 2014 08:31:23 +0000 Subject: [PATCH] [Driver][Mips] Check MIPS CPU name provided to the Clang driver. llvm-svn: 212260 --- clang/lib/Basic/Targets.cpp | 11 ++++++++++- clang/test/Driver/mips-abi.c | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 424ce6c..81a0003 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -5305,8 +5305,17 @@ public: StringRef getABI() const override { return ABI; } bool setCPU(const std::string &Name) override { + bool IsMips32 = getTriple().getArch() == llvm::Triple::mips || + getTriple().getArch() == llvm::Triple::mipsel; CPU = Name; - return true; + return llvm::StringSwitch(Name) + .Case("mips32", IsMips32) + .Case("mips32r2", IsMips32) + .Case("mips32r6", IsMips32) + .Case("mips64", true) + .Case("mips64r2", true) + .Case("mips64r6", true) + .Default(false); } const std::string& getCPU() const { return CPU; } void getDefaultFeatures(llvm::StringMap &Features) const override { diff --git a/clang/test/Driver/mips-abi.c b/clang/test/Driver/mips-abi.c index 8858e2b..c17a4be 100644 --- a/clang/test/Driver/mips-abi.c +++ b/clang/test/Driver/mips-abi.c @@ -85,3 +85,13 @@ // RUN: | FileCheck -check-prefix=MIPS-ARCH-64R2 %s // MIPS-ARCH-64R2: "-target-cpu" "mips64r2" // MIPS-ARCH-64R2: "-target-abi" "n64" +// +// RUN: not %clang -target mips64-linux-gnu -c %s \ +// RUN: -march=mips32 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ARCH-6432 %s +// MIPS-ARCH-6432: error: unknown target CPU 'mips32' +// +// RUN: not %clang -target mips-linux-gnu -c %s \ +// RUN: -march=unknown 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ARCH-UNKNOWN %s +// MIPS-ARCH-UNKNOWN: error: unknown target CPU 'unknown' -- 2.7.4