[cfe-commits] r168757 - in /cfe/trunk: lib/StaticAnalyzer/Core/ExprEngineC.cpp test/Analysis/misc-ps-region-store.cpp
Ted Kremenek
kremenek at apple.com
Tue Nov 27 21:37:19 PST 2012
Yes. I've gone and done that.
On Nov 27, 2012, at 5:54 PM, Jordan Rose <jordan_rose at apple.com> wrote:
> Should we revert the previous "fix" in RegionStore, then?
>
>
> On Nov 27, 2012, at 17:49 , Ted Kremenek <kremenek at apple.com> wrote:
>
>> Author: kremenek
>> Date: Tue Nov 27 19:49:01 2012
>> New Revision: 168757
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=168757&view=rev
>> Log:
>> Fix another false positive due to a CXX temporary object appearing in a C initializer.
>>
>> The stop-gap here is to just drop such objects when processing the InitListExpr.
>> We still need a better solution.
>>
>> Fixes <rdar://problem/12755044>.
>>
>> Modified:
>> cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp
>> cfe/trunk/test/Analysis/misc-ps-region-store.cpp
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp?rev=168757&r1=168756&r2=168757&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp Tue Nov 27 19:49:01 2012
>> @@ -581,8 +581,10 @@
>>
>> for (InitListExpr::const_reverse_iterator it = IE->rbegin(),
>> ei = IE->rend(); it != ei; ++it) {
>> - vals = getBasicVals().consVals(state->getSVal(cast<Expr>(*it), LCtx),
>> - vals);
>> + SVal V = state->getSVal(cast<Expr>(*it), LCtx);
>> + if (dyn_cast_or_null<CXXTempObjectRegion>(V.getAsRegion()))
>> + V = UnknownVal();
>> + vals = getBasicVals().consVals(V, vals);
>> }
>>
>> B.generateNode(IE, Pred,
>>
>> Modified: cfe/trunk/test/Analysis/misc-ps-region-store.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/misc-ps-region-store.cpp?rev=168757&r1=168756&r2=168757&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/Analysis/misc-ps-region-store.cpp (original)
>> +++ cfe/trunk/test/Analysis/misc-ps-region-store.cpp Tue Nov 27 19:49:01 2012
>> @@ -656,3 +656,41 @@
>> return w.x;
>> }
>>
>> +// This testcase tests whether we treat the anonymous union and union
>> +// the same way. This previously resulted in a "return of stack address"
>> +// warning because the anonymous union resulting in a temporary object
>> +// getting put into the initializer. We still aren't handling this correctly,
>> +// but now if a temporary object appears in an initializer we just ignore it.
>> +// Fixes <rdar://problem/12755044>.
>> +
>> +struct Rdar12755044_foo
>> +{
>> + struct Rdar12755044_bar
>> + {
>> + union baz
>> + {
>> + int i;
>> + };
>> + } aBar;
>> +};
>> +
>> +struct Rdar12755044_foo_anon
>> +{
>> + struct Rdar12755044_bar
>> + {
>> + union
>> + {
>> + int i;
>> + };
>> + } aBar;
>> +};
>> +
>> +const Rdar12755044_foo_anon *radar12755044_anon() {
>> + static const Rdar12755044_foo_anon Rdar12755044_foo_list[] = { { { } } };
>> + return Rdar12755044_foo_list; // no-warning
>> +}
>> +
>> +const Rdar12755044_foo *radar12755044() {
>> + static const Rdar12755044_foo Rdar12755044_foo_list[] = { { { } } };
>> + return Rdar12755044_foo_list; // no-warning
>> +}
>>
>>
>> _______________________________________________
>> 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