[cfe-dev] A small proposal about TagType's and source ranges

Abramo Bagnara abramo.bagnara at gmail.com
Sun Mar 13 00:38:49 PST 2011


Il 13/03/2011 05:34, John McCall ha scritto:
> 
> On Mar 12, 2011, at 11:28 AM, Abramo Bagnara wrote:
> 
>> Il 12/03/2011 20:10, John McCall ha scritto:
>>>
>>> On Mar 12, 2011, at 8:54 AM, Abramo Bagnara wrote:
>>>
>>>>
>>>> We are struggling to fix lack of proper source location range for
>>>> TagType's due to missing setting of both source location for tag keyword
>>>> and name.
>>>>
>>>> We'd like to propose the following simplification of current approach to
>>>> tag types and elaborated types storing:
>>>>
>>>> Currently clang uses (only in C++) an ElaboratedType whenever the type
>>>> has an explicit class/struct/union/enum keyword *or* a name qualifier.
>>>>
>>>> We propose to use an ElaboratedType *only* whenever there is a name
>>>> qualifier and to add to TagTypeLoc a (possibly invalid) tag keyword
>>>> location (removing the one now available in ElaboratedTypeLoc).
>>>
>>> How would we represent "struct A::B" in C++?
>>>
>>> It's also important to distinguish between A and struct A in C++.  If we don't have an elaborated type node, what remembers this distinction?
>>
>> On the syntactic side they can be distinguished in the TagTypeLoc using
>> the validity of tag keyword location. On the semantic side they can be
>> distinguished inheriting TagType from TypeWithKeyword.
> 
> 
> Adding non-canonical state to TagType is not really acceptable;  it's really,
> really nice right now that TagTypes are always canonical.

If you prefer in this way the inheritance from TypeWithKeyword can be
avoided. Do we need to distinguish between "S" and "struct S" in places
where TypeLoc is not available?




More information about the cfe-dev mailing list