r214471 - Remove this pointer that is converted to bool. In well-defined contexts, the
Richard Smith
richard at metafoo.co.uk
Fri Aug 1 15:15:21 PDT 2014
On Fri, Aug 1, 2014 at 3:06 PM, Richard Trieu <rtrieu at google.com> wrote:
> 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.
>
Looks fine for branch. I don't think there's any actual undefined behavior
here, is there (assuming that the assert would not have fired)?
> On Thu, Jul 31, 2014 at 6:42 PM, Richard Trieu <rtrieu at google.com> wrote:
>
>> Author: rtrieu
>> Date: Thu Jul 31 20:42:01 2014
>> New Revision: 214471
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=214471&view=rev
>> Log:
>> Remove this pointer that is converted to bool. In well-defined contexts,
>> the
>> this pointer is always non-null. If the this pointer is null, it is
>> undefined
>> and the compiler may optimize it away by assuming it is non-null. The
>> null
>> checks are pushed into the callers.
>>
>> Modified:
>> cfe/trunk/lib/Basic/DiagnosticIDs.cpp
>>
>> Modified: cfe/trunk/lib/Basic/DiagnosticIDs.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/DiagnosticIDs.cpp?rev=214471&r1=214470&r2=214471&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Basic/DiagnosticIDs.cpp (original)
>> +++ cfe/trunk/lib/Basic/DiagnosticIDs.cpp Thu Jul 31 20:42:01 2014
>> @@ -259,14 +259,14 @@ namespace clang {
>> /// getDescription - Return the description of the specified custom
>> /// diagnostic.
>> StringRef getDescription(unsigned DiagID) const {
>> - assert(this && DiagID-DIAG_UPPER_LIMIT < DiagInfo.size() &&
>> + assert(DiagID - DIAG_UPPER_LIMIT < DiagInfo.size() &&
>> "Invalid diagnostic ID");
>> return DiagInfo[DiagID-DIAG_UPPER_LIMIT].second;
>> }
>>
>> /// getLevel - Return the level of the specified custom diagnostic.
>> DiagnosticIDs::Level getLevel(unsigned DiagID) const {
>> - assert(this && DiagID-DIAG_UPPER_LIMIT < DiagInfo.size() &&
>> + assert(DiagID - DIAG_UPPER_LIMIT < DiagInfo.size() &&
>> "Invalid diagnostic ID");
>> return DiagInfo[DiagID-DIAG_UPPER_LIMIT].first;
>> }
>> @@ -358,6 +358,7 @@ bool DiagnosticIDs::isDefaultMappingAsEr
>> StringRef DiagnosticIDs::getDescription(unsigned DiagID) const {
>> if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID))
>> return Info->getDescription();
>> + assert(CustomDiagInfo && "Invalid CustomDiagInfo");
>> return CustomDiagInfo->getDescription(DiagID);
>> }
>>
>> @@ -384,8 +385,10 @@ DiagnosticIDs::Level
>> DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, SourceLocation Loc,
>> const DiagnosticsEngine &Diag) const {
>> // Handle custom diagnostics, which cannot be mapped.
>> - if (DiagID >= diag::DIAG_UPPER_LIMIT)
>> + if (DiagID >= diag::DIAG_UPPER_LIMIT) {
>> + assert(CustomDiagInfo && "Invalid CustomDiagInfo");
>> return CustomDiagInfo->getLevel(DiagID);
>> + }
>>
>> unsigned DiagClass = getBuiltinDiagClass(DiagID);
>> if (DiagClass == CLASS_NOTE) return DiagnosticIDs::Note;
>> @@ -669,6 +672,7 @@ void DiagnosticIDs::EmitDiag(Diagnostics
>>
>> bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const {
>> if (DiagID >= diag::DIAG_UPPER_LIMIT) {
>> + assert(CustomDiagInfo && "Invalid CustomDiagInfo");
>> // Custom diagnostics.
>> return CustomDiagInfo->getLevel(DiagID) >= DiagnosticIDs::Error;
>> }
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140801/92246d02/attachment.html>
More information about the cfe-commits
mailing list