On Mar 1, 2010, at 8:56 PM, Rafael Espindola wrote:

>>> One part of the patch I am not very happy with is the change to
>>> SemaExpr.  It is there to match the logic in  EmitBaseInitializer. The
>>> problem is that it is always marking the destructor as used. We should
>>> do so only if it is actually being used in a base initializer and
>>> exceptions are enabled. Suggestions on how to do so are welcome.
>> 
>> 
>> Sema::BuildBaseInitializer is where we perform type-checking for base 
>> initializers; I suggest putting this logic there. I also feel like we should 
>> always mark the destructor (even when exceptions are disabled), because 
>> -fno-exceptions should not change the behavior of the front end for 
>> non-exception constructs.
> 
> The problem with Sema::BuildBaseInitializer is that it is not used in
> implicit cases like
> 
> ------------------------------------------
> struct TypedInit  {
> virtual ~TypedInit();
> };
> struct OpInit : public TypedInit {
> virtual void resolveBitReference();
> };
> struct BinOpInit : public OpInit {
> virtual void getAsString() const;
> };
> void foobar() {
> new BinOpInit();
> }
> ---------------------------------------------

Ah, sorry. Sema::SetBaseOrMemberInitializers handles both implicit base 
initializers and explicitly-written ones. 

> The new patch is less aggressive then the old one. Now when marking a
> constructor as referenced we walk the initializers and mark the
> destructors for those classes as referenced.

Makes sense.

> I will try to go over the rest of the review tomorrow.


Should I wait until tomorrow to re-review?

        - Doug
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to