[cfe-commits] r157204 - in /cfe/trunk: lib/StaticAnalyzer/Core/ObjCMessage.cpp test/Analysis/PR12905.c
Benjamin Kramer
benny.kra at googlemail.com
Mon May 21 13:36:25 PDT 2012
On 21.05.2012, at 22:04, Anna Zaks wrote:
> Benjamin,
>
> The issue is that the size of the string is 1, correct? Can we just check the size and return if it's less than 2 and proceed with the existing checks afterwards? This function is called a lot.
LLVM knows how to generate great optimized code for startswith, it becomes a check that the length is >=2 and two unaligned loads + compares. It's far more readable and I doubt that it's slower than the old buggy code.
> Do you have a test case?
Yes, and a reduced version was committed along with this fix.
- Ben
>
> Thanks,
> Anna.
> On May 21, 2012, at 12:40 PM, Benjamin Kramer wrote:
>
>> Author: d0k
>> Date: Mon May 21 14:40:38 2012
>> New Revision: 157204
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=157204&view=rev
>> Log:
>> Analyzer: Fix PR12905, a crash when encountering a call to a function named "C".
>>
>> While there clean up indentation.
>>
>> Added:
>> cfe/trunk/test/Analysis/PR12905.c
>> Modified:
>> cfe/trunk/lib/StaticAnalyzer/Core/ObjCMessage.cpp
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ObjCMessage.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ObjCMessage.cpp?rev=157204&r1=157203&r2=157204&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/ObjCMessage.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/ObjCMessage.cpp Mon May 21 14:40:38 2012
>> @@ -161,16 +161,15 @@
>> }
>>
>> bool CallOrObjCMessage::isCFCGAllowingEscape(StringRef FName) {
>> - if (FName[0] == 'C' && (FName[1] == 'F' || FName[1] == 'G'))
>> - if (StrInStrNoCase(FName, "InsertValue") != StringRef::npos||
>> - StrInStrNoCase(FName, "AddValue") != StringRef::npos ||
>> - StrInStrNoCase(FName, "SetValue") != StringRef::npos ||
>> - StrInStrNoCase(FName, "WithData") != StringRef::npos ||
>> - StrInStrNoCase(FName, "AppendValue") != StringRef::npos||
>> - StrInStrNoCase(FName, "SetAttribute") != StringRef::npos) {
>> - return true;
>> - }
>> - return false;
>> + if (!FName.startswith("CF") && !FName.startswith("CG"))
>> + return false;
>> +
>> + return StrInStrNoCase(FName, "InsertValue") != StringRef::npos ||
>> + StrInStrNoCase(FName, "AddValue") != StringRef::npos ||
>> + StrInStrNoCase(FName, "SetValue") != StringRef::npos ||
>> + StrInStrNoCase(FName, "WithData") != StringRef::npos ||
>> + StrInStrNoCase(FName, "AppendValue") != StringRef::npos ||
>> + StrInStrNoCase(FName, "SetAttribute") != StringRef::npos;
>> }
>>
>>
>>
>> Added: cfe/trunk/test/Analysis/PR12905.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/PR12905.c?rev=157204&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Analysis/PR12905.c (added)
>> +++ cfe/trunk/test/Analysis/PR12905.c Mon May 21 14:40:38 2012
>> @@ -0,0 +1,8 @@
>> +// RUN: %clang_cc1 -analyze -analyzer-checker=core %s
>> +// PR12905
>> +
>> +void C(void);
>> +
>> +void t(void) {
>> + C();
>> +}
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list