On Oct 6, 2010, at 9:36 AM, John McCall wrote:

> 
> On Oct 6, 2010, at 7:55 AM, Douglas Gregor wrote:
> 
>> 
>> On Sep 27, 2010, at 5:56 AM, John McCall wrote:
>> 
>>> On Sep 20, 2010, at 6:30 PM, Douglas Gregor wrote:
>>>> I'd really rather not add a new expression type just for the purpose of 
>>>> type-checking __is_convertible_to. How about we synthesize appropriate 
>>>> expressions instead, e.g., a DeclRefExpr to a synthesized variable, or a 
>>>> CallExpr to a synthesized function with an appropriate return type?
>>> 
>>> Actually, I think there are several places in the AST where "opaque 
>>> expression of fixed type and l-valueness" would be very convenient — mostly 
>>> with copies, e.g. with synthesized array copies, caught-exception copies, 
>>> etc.
>> 
>> Synthesized array copies always have a parameter to hang on to.
> 
> Right, but we end up synthesizing array index variables.  I'm suggesting this 
> as a general alternative to making a reference to a synthesized variable.
> 
>> I'm on the fence. I don't like having expression nodes that don't represent 
>> ideas in the language, but there is some messiness in the expression 
>> synthesis we do in Sema.
> 
> I'm just saying that there are several places in the language where values 
> come from no intrinsically-expressible place, and while it's obviously always 
> possible to fake up expressions with the right properties in terms of 
> spurious variables, I'm not sure I accept that that's somehow inherently 
> cleaner than having a pair of expressions for "this opaque value comes from 
> some place that the context knows about" and "the sub-expression needs these 
> opaque values to work".  I'm basically suggesting specialized lambdas. :)  
> They'd definitely be constrained to a few places in the AST, though.

And.... John convinced me. We do want to add an OpaqueValueExpr (or whatever 
name fits) that has type + value classification information. It can be used in 
various places in Sema and the AST: for type checking when we need a 
placeholder expression, for storing placeholder arguments for block-variable 
copies and catch-variable copies, for the placeholder in an implicit 
copy-construction of an array, and for the dreaded GNU x ? : y extension.

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

Reply via email to