[Driver][Mips] Check MIPS CPU name provided to the Clang driver.
authorSimon Atanasyan <simon@atanasyan.com>
Thu, 3 Jul 2014 08:31:23 +0000 (08:31 +0000)
committerSimon Atanasyan <simon@atanasyan.com>
Thu, 3 Jul 2014 08:31:23 +0000 (08:31 +0000)
llvm-svn: 212260

clang/lib/Basic/Targets.cpp
clang/test/Driver/mips-abi.c

index 424ce6c..81a0003 100644 (file)
@@ -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<bool>(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<bool> &Features) const override {
index 8858e2b..c17a4be 100644 (file)
 // 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'