[cfe-dev] A small proposal about TagType's and source ranges
John McCall
rjmccall at apple.com
Sat Mar 12 20:34:22 PST 2011
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.
John.
More information about the cfe-dev
mailing list