[cfe-commits] r147306 - /cfe/trunk/lib/Analysis/CFG.cpp
Xu Zhongxing
xu_zhong_xing at 163.com
Thu Dec 29 04:03:33 PST 2011
I admit this is not a correct solution. If I set add CXXConstructExpr
bit in the CFG::BuildOptions to false, there exist some cases
CXXConstructExpr is not added as block-level expr, where it should.
Linearizing the CFG is great idea. I already enjoy it very much.
We need to provide more information to CXXConstructExpr: its destination
object (a variable or a temporary object that should be conjured) and
its kind (base,complete).
For the destination object, we could always conjure a temporary object
and use LazyCompoundVal to bind the real object being constructed when
we later see it.
δΊ 2011/12/29 13:59, Ted Kremenek ει:
> Hi Zhongxing,
>
> I don't understand how this is actually fixing (1) or (2). Can you explain? We're moving to a place where we will likely linearize the entire CFG (this is already the case for the static analyzer), so it would be great to find a solution to (1) or (2) that doesn't depend on whether or not CXXConstructExpr is a block-level expression.
>
> Thanks,
> Ted
>
> On Dec 27, 2011, at 8:38 PM, Zhongxing Xu wrote:
>
>> Author: zhongxingxu
>> Date: Tue Dec 27 22:38:46 2011
>> New Revision: 147306
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=147306&view=rev
>> Log:
>> Enable the user to control whether CXXConstructExpr will be added as a
>> block-level expr. Currently CXXConstructExpr is always added as a block-level
>> expr. This caused two problems for the analyzer (and potentially for the
>> CFG-based codegen).
>> 1. We have no way to know whether a ctor call is base or complete.
>> 2. We have no way to know the destination object being contructed.
>>
>> Modified:
>> cfe/trunk/lib/Analysis/CFG.cpp
>>
>> Modified: cfe/trunk/lib/Analysis/CFG.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=147306&r1=147305&r2=147306&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/CFG.cpp (original)
>> +++ cfe/trunk/lib/Analysis/CFG.cpp Tue Dec 27 22:38:46 2011
>> @@ -2768,7 +2768,7 @@
>> CFGBlock *CFGBuilder::VisitCXXConstructExpr(CXXConstructExpr *C,
>> AddStmtChoice asc) {
>> autoCreateBlock();
>> - if (!C->isElidable())
>> + if (!C->isElidable()&& asc.alwaysAdd(*this, C))
>> appendStmt(Block, C);
>>
>> return VisitChildren(C);
>>
>>
>> _______________________________________________
>> 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
More information about the cfe-commits
mailing list