<div dir="ltr">FWIW, you can write "*M" rather than M.getValue() if you reckon that's neater.<br><br>And you could roll the declaration/initialization of M into the 'if' condition - but I can understand why you might prefer not to, given it's a many-line statement, etc.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Feb 6, 2018 at 4:39 PM Erich Keane via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: erichkeane<br>
Date: Tue Feb  6 16:37:19 2018<br>
New Revision: 324433<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=324433&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=324433&view=rev</a><br>
Log:<br>
[NFC] Change odd cast-through-unknown behavior to an Optional<br>
<br>
This bit of code in the driver uses '~0U' as a sentinel value.<br>
The result is an odd mishmash of casts just to work.  This replaces<br>
it with an optional,  which is a little less crazy looking.<br>
--ehis line, and those below, will be ignored--<br>
<br>
M    lib/Driver/Driver.cpp<br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/Driver.cpp<br>
<br>
Modified: cfe/trunk/lib/Driver/Driver.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=324433&r1=324432&r2=324433&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=324433&r1=324432&r2=324433&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Driver.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Driver.cpp Tue Feb  6 16:37:19 2018<br>
@@ -148,15 +148,15 @@ void Driver::setDriverModeFromOption(Str<br>
     return;<br>
   StringRef Value = Opt.drop_front(OptName.size());<br>
<br>
-  const unsigned M = llvm::StringSwitch<unsigned>(Value)<br>
-                         .Case("gcc", GCCMode)<br>
-                         .Case("g++", GXXMode)<br>
-                         .Case("cpp", CPPMode)<br>
-                         .Case("cl", CLMode)<br>
-                         .Default(~0U);<br>
+  auto M = llvm::StringSwitch<llvm::Optional<DriverMode>>(Value)<br>
+                           .Case("gcc", GCCMode)<br>
+                           .Case("g++", GXXMode)<br>
+                           .Case("cpp", CPPMode)<br>
+                           .Case("cl", CLMode)<br>
+                           .Default(None);<br>
<br>
-  if (M != ~0U)<br>
-    Mode = static_cast<DriverMode>(M);<br>
+  if (M)<br>
+    Mode = M.getValue();<br>
   else<br>
     Diag(diag::err_drv_unsupported_option_argument) << OptName << Value;<br>
 }<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>