On Jan 27, 2012, at 7:56 PM, Eli Friedman wrote:
> On Fri, Jan 27, 2012 at 3:26 PM, Eli Friedman <[email protected]> wrote:
>> On Fri, Jan 27, 2012 at 3:12 PM, John McCall <[email protected]> wrote:
>>> On Jan 27, 2012, at 2:53 PM, Eli Friedman wrote:
>>>> On Thu, Jan 26, 2012 at 7:29 PM, John McCall <[email protected]> wrote:
>>>>> On Jan 24, 2012, at 9:34 PM, Eli Friedman wrote:
>>>>>> Patch attached.  Basically, this is implementing the C++11 rules in
>>>>>> [basic.def.odr]p2 for variables allowed in constant expressions.
>>>>>> (Those rules don't matter so much for most code given how we do code
>>>>>> generation, but we have to get the rules exactly right to get implicit
>>>>>> capture in lambda expressions working correctly.)
>>>>>> 
>>>>>> I don't really like this patch, but it seems like it is necessary.
>>>>> 
>>>>> Yeah, I'm really not happy with this.  Obvious alternative:  mark ODR use
>>>>> at the DRE creation site unless the object is not already marked and it
>>>>> meets the constant-loading criteria.  If it does, flag that this 
>>>>> full-expression
>>>>> contains a potential reference, then walk back over the completed
>>>>> full-expression looking for PE DREs not direct operands of L2R casts.
>>>> 
>>>> Is there any existing hook that actually triggers where I need it to?
>>>> MaybeCreateExprWithCleanups seems close... but doesn't quite cover
>>>> everything.
>>> 
>>> What's missing?
>> 
>> In essence, things which are constant-expressions in the C++ grammar
>> are missing.  Not too hard to add them, I guess.
> 
> New version attached; it doesn't pass regression tests because I still
> need to add a hook to catch VLA array bounds attached to declarations,
> but is this the direction you were thinking of?

That's the general idea, although I didn't carefully look at where you added
the calls.  Two things, though:
  - The dynamic optimization of not doing this traversal unless we saw
    a DeclRef of a not-yet-used-but-const-and-whatever-else declaration
    is going to be quite important.
  - isDependentContext() is actually both (a) surprisingly expensive and
    (b) extremely easy for Sema to cache.

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

Reply via email to