[cfe-dev] RFC: Extra source location information for dependent types

Douglas Gregor dgregor at apple.com
Wed Apr 1 22:05:02 PDT 2009


On Apr 1, 2009, at 9:26 PM, Chris Lattner wrote:

>
> On Mar 31, 2009, at 2:31 PM, Douglas Gregor wrote:
>> Template instantiation for class templates and types is starting to
>> shape up. One problem I'm seeing now is that we don't retain enough
>> source location information in the type system to do a good job with
>> instantiation.
>
>
> I'm fine with this on general principles, and actually have assumed  
> that we would get this at some point someday anyway.  I always  
> assumed that it would take the form of an optional flag to sema that  
> enables full source location info for all types.  This would cause  
> sema to create a "PointerTypeWithLoc" type instead of a PointerType  
> node.  The former would just be a sugared version of the type whose  
> canonical version would desugar down to the pointer type, so all  
> semantic clients would be fine.  This would be incredibly useful for  
> some clients, such as a refactoring tool.

As much as I dislike the idea of having a flag that changes the AST  
representation, I do think this makes sense.

> As we've previously discussed this would also be a good way to shake  
> out bugs where clients might be looking at the non-canonical version  
> of a type accidentally: with this optional flag, no types would be  
> canonical :)

Yep.

>
>>> Both of these have SourceLocation info contained within their
>>> expression. That said, what specific Type classes do you anticipate
>>> adding source location information? If the classes are self-
>>> contained and don't effect the semantics of the type system in
>>> general, there may not be a need for any fancy infrastructure (or
>>> sweeping changes).
>>
>> We'll need to add SourceLocations to nearly every compound type,
>> because you can build just about any type out of other, dependent
>> types and we need the location information during template
>> instantiation. This means everything from FunctionProtoTypes to
>> PointerTypes would have SourceLocations.
>
> I am really concerned about doing this unconditionally, and by  
> default.  I'm actually much less concerned about doing this for  
> dependent types and those derived from a dependent type.  Is there a  
> constant time operation to tell if a random type is dependent?

Yes, isDependentType is constant time.

> It would probably be best to implement this as an optional opt-in  
> thing as described above, and then consider turning it on for  
> dependent types.  What do you think?

I think that makes sense. We'll want to do the performance tests each  
way and weigh the advantages/disadvantages.

   - Doug




More information about the cfe-dev mailing list