<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Jun 8, 2014 at 2:55 PM, Larry D'Anna <span dir="ltr"><<a href="mailto:larry@elder-gods.org" target="_blank">larry@elder-gods.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Bad inputs for -mfloat-abi and -mrelocation-model will cause asserts to fail.<br>
-mcode-model is checked earlier, but I added an error message for it as well for<br>
consistency's sake.<br>
---<br>
<br>
 PATCH v2 changes: fixed whitespace.<br>
<br>
 include/clang/Basic/DiagnosticFrontendKinds.td |  6 ++++++<br>
 lib/CodeGen/BackendUtil.cpp                    | 21 ++++++++++++++++-----<br>
 test/Misc/float-abi.c                          |  3 +++<br>
 test/Misc/relocation-model.c                   |  3 +++<br>
 4 files changed, 28 insertions(+), 5 deletions(-)<br>
 create mode 100644 test/Misc/float-abi.c<br>
 create mode 100644 test/Misc/relocation-model.c<br>
<br>
diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td<br>
index 3527e8e..eac98e3 100644<br>
--- a/include/clang/Basic/DiagnosticFrontendKinds.td<br>
+++ b/include/clang/Basic/DiagnosticFrontendKinds.td<br>
@@ -67,6 +67,12 @@ def err_fe_unable_to_load_plugin : Error<<br>
     "unable to load plugin '%0': '%1'">;<br>
 def err_fe_unable_to_create_target : Error<<br>
     "unable to create target: '%0'">;<br>
+def err_fe_invalid_code_model : Error<<br>
+    "invalid code model: '%0'">;<br>
+def err_fe_invalid_relocation_model : Error<<br>
+    "invalid relocation model: '%0'">;<br>
+def err_fe_invalid_float_abi : Error<<br>
+    "invalid float abi: '%0'">;<br>
 def err_fe_unable_to_interface_with_target : Error<<br>
     "unable to interface with target machine">;<br>
 def err_fe_unable_to_open_output : Error<<br>
diff --git a/lib/CodeGen/BackendUtil.cpp b/lib/CodeGen/BackendUtil.cpp<br>
index e15d357..c48f570 100644<br>
--- a/lib/CodeGen/BackendUtil.cpp<br>
+++ b/lib/CodeGen/BackendUtil.cpp<br>
@@ -373,7 +373,11 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {<br>
       .Case("large", llvm::CodeModel::Large)<br>
       .Case("default", llvm::CodeModel::Default)<br>
       .Default(~0u);<br>
-  assert(CodeModel != ~0u && "invalid code model!");<br>
+  if (CodeModel == ~0u) {<br>
+    if (MustCreateTM)<br>
+      Diags.Report(diag::err_fe_invalid_code_model) << CodeGenOpts.CodeModel;<br>
+    return nullptr;<br>
+  }<br>
   llvm::CodeModel::Model CM = static_cast<llvm::CodeModel::Model>(CodeModel);<br>
<br>
   SmallVector<const char *, 16> BackendArgs;<br>
@@ -411,10 +415,13 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {<br>
     RM = llvm::Reloc::Static;<br>
   } else if (CodeGenOpts.RelocationModel == "pic") {<br>
     RM = llvm::Reloc::PIC_;<br>
-  } else {<br>
-    assert(CodeGenOpts.RelocationModel == "dynamic-no-pic" &&<br>
-           "Invalid PIC model!");<br>
+  } else if (CodeGenOpts.RelocationModel == "dynamic-no-pic") {<br>
     RM = llvm::Reloc::DynamicNoPIC;<br>
+  } else {<br>
+    if (MustCreateTM)<br>
+      Diags.Report(diag::err_fe_invalid_relocation_model)<br>
+             << CodeGenOpts.RelocationModel;<br>
+    return nullptr;<br>
   }<br>
<br>
   CodeGenOpt::Level OptLevel = CodeGenOpt::Default;<br>
@@ -450,7 +457,11 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {<br>
   else if (CodeGenOpts.FloatABI == "hard")<br>
     Options.FloatABIType = llvm::FloatABI::Hard;<br>
   else {<br>
-    assert(CodeGenOpts.FloatABI.empty() && "Invalid float abi!");<br>
+    if (!CodeGenOpts.FloatABI.empty()) {<br>
+      if (MustCreateTM)<br>
+       Diags.Report(diag::err_fe_invalid_float_abi) << CodeGenOpts.FloatABI;<br>
+      return nullptr;<br>
+    }<br>
     Options.FloatABIType = llvm::FloatABI::Default;<br>
   }<br>
<br>
diff --git a/test/Misc/float-abi.c b/test/Misc/float-abi.c<br>
new file mode 100644<br>
index 0000000..7201cbe0<br>
--- /dev/null<br>
+++ b/test/Misc/float-abi.c<br>
@@ -0,0 +1,3 @@<br>
+// RUN: not %clang_cc1 -S -mfloat-abi notanabi %s 2>&1 | FileCheck -check-prefix CHECK-INVALID %s<br>
+<br>
+// CHECK-INVALID: error: invalid float abi: 'notanabi'<br>
diff --git a/test/Misc/relocation-model.c b/test/Misc/relocation-model.c<br>
new file mode 100644<br>
index 0000000..e49f1bc<br>
--- /dev/null<br>
+++ b/test/Misc/relocation-model.c<br>
@@ -0,0 +1,3 @@<br>
+// RUN: not %clang_cc1 -S -mrelocation-model foobar %s 2>&1 | FileCheck -check-prefix CHECK-INVALID %s<br>
+<br>
+// CHECK-INVALID: error: invalid relocation model: 'foobar'<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.3.2<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</font></span></blockquote></div><br></div><div class="gmail_extra">Please fold these two tests together into one test in test/Driver (maybe invalid-target.c?). Please also add a test for the code model diagnostic.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Other than that, this looks good to me, thanks! Do you need someone to commit this for you?</div></div>