<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Done. Thanks!<div><br></div><div>-bw</div><div><br><div style=""><div>On Aug 1, 2014, at 3:18 PM, Douglas Gregor <<a href="mailto:dgregor@apple.com">dgregor@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=us-ascii"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">LGTM, approved for the branch.<div class=""><br class=""><div style=""><blockquote type="cite" class=""><div class="">On Aug 1, 2014, at 3:06 PM, Richard Trieu <<a href="mailto:rtrieu@google.com" class="">rtrieu@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I would like to get this into 3.5 to remove the undefined behavior and also to prevent future versions of Clang warning on this when the undefined pointer to bool conversion warning will eventually get improved to catch this. <br class="">
<div class="gmail_extra"><br class=""><br class=""><div class="gmail_quote">On Thu, Jul 31, 2014 at 6:42 PM, Richard Trieu <span dir="ltr" class=""><<a href="mailto:rtrieu@google.com" target="_blank" class="">rtrieu@google.com</a>></span> wrote:<br class="">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rtrieu<br class="">
Date: Thu Jul 31 20:42:01 2014<br class="">
New Revision: 214471<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=214471&view=rev" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=214471&view=rev</a><br class="">
Log:<br class="">
Remove this pointer that is converted to bool.  In well-defined contexts, the<br class="">
this pointer is always non-null.  If the this pointer is null, it is undefined<br class="">
and the compiler may optimize it away by assuming it is non-null.  The null<br class="">
checks are pushed into the callers.<br class="">
<br class="">
Modified:<br class="">
    cfe/trunk/lib/Basic/DiagnosticIDs.cpp<br class="">
<br class="">
Modified: cfe/trunk/lib/Basic/DiagnosticIDs.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/DiagnosticIDs.cpp?rev=214471&r1=214470&r2=214471&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/DiagnosticIDs.cpp?rev=214471&r1=214470&r2=214471&view=diff</a><br class="">



==============================================================================<br class="">
--- cfe/trunk/lib/Basic/DiagnosticIDs.cpp (original)<br class="">
+++ cfe/trunk/lib/Basic/DiagnosticIDs.cpp Thu Jul 31 20:42:01 2014<br class="">
@@ -259,14 +259,14 @@ namespace clang {<br class="">
       /// getDescription - Return the description of the specified custom<br class="">
       /// diagnostic.<br class="">
       StringRef getDescription(unsigned DiagID) const {<br class="">
-        assert(this && DiagID-DIAG_UPPER_LIMIT < DiagInfo.size() &&<br class="">
+        assert(DiagID - DIAG_UPPER_LIMIT < DiagInfo.size() &&<br class="">
                "Invalid diagnostic ID");<br class="">
         return DiagInfo[DiagID-DIAG_UPPER_LIMIT].second;<br class="">
       }<br class="">
<br class="">
       /// getLevel - Return the level of the specified custom diagnostic.<br class="">
       DiagnosticIDs::Level getLevel(unsigned DiagID) const {<br class="">
-        assert(this && DiagID-DIAG_UPPER_LIMIT < DiagInfo.size() &&<br class="">
+        assert(DiagID - DIAG_UPPER_LIMIT < DiagInfo.size() &&<br class="">
                "Invalid diagnostic ID");<br class="">
         return DiagInfo[DiagID-DIAG_UPPER_LIMIT].first;<br class="">
       }<br class="">
@@ -358,6 +358,7 @@ bool DiagnosticIDs::isDefaultMappingAsEr<br class="">
 StringRef DiagnosticIDs::getDescription(unsigned DiagID) const {<br class="">
   if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID))<br class="">
     return Info->getDescription();<br class="">
+  assert(CustomDiagInfo && "Invalid CustomDiagInfo");<br class="">
   return CustomDiagInfo->getDescription(DiagID);<br class="">
 }<br class="">
<br class="">
@@ -384,8 +385,10 @@ DiagnosticIDs::Level<br class="">
 DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, SourceLocation Loc,<br class="">
                                   const DiagnosticsEngine &Diag) const {<br class="">
   // Handle custom diagnostics, which cannot be mapped.<br class="">
-  if (DiagID >= diag::DIAG_UPPER_LIMIT)<br class="">
+  if (DiagID >= diag::DIAG_UPPER_LIMIT) {<br class="">
+    assert(CustomDiagInfo && "Invalid CustomDiagInfo");<br class="">
     return CustomDiagInfo->getLevel(DiagID);<br class="">
+  }<br class="">
<br class="">
   unsigned DiagClass = getBuiltinDiagClass(DiagID);<br class="">
   if (DiagClass == CLASS_NOTE) return DiagnosticIDs::Note;<br class="">
@@ -669,6 +672,7 @@ void DiagnosticIDs::EmitDiag(Diagnostics<br class="">
<br class="">
 bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const {<br class="">
   if (DiagID >= diag::DIAG_UPPER_LIMIT) {<br class="">
+    assert(CustomDiagInfo && "Invalid CustomDiagInfo");<br class="">
     // Custom diagnostics.<br class="">
     return CustomDiagInfo->getLevel(DiagID) >= DiagnosticIDs::Error;<br class="">
   }<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
cfe-commits mailing list<br class="">
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank" class="">cfe-commits@cs.uiuc.edu</a><br class="">
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank" class="">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br class="">
</blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></div></div>
</blockquote></div><br></div></body></html>