Problem with source ranges for template classes

Abramo Bagnara abramo.bagnara at bugseng.com
Thu Feb 5 00:52:51 PST 2015


Il 05/02/2015 08:20, Richard Smith ha scritto:
> On Wed, Feb 4, 2015 at 1:02 AM, Abramo Bagnara
> <abramo.bagnara at bugseng.com <mailto:abramo.bagnara at bugseng.com>> wrote:
> 
> 
>     Using this source:
> 
>     template <int> struct C { template <typename U> struct D; };
>     template <> template <typename V> struct C<0>::D { };
> 
>     we get the following AST for the second line
> 
>     `-ClassTemplateDecl 0x8596370 parent 0x8595cf0 prev 0x8596080
>     <line:2:13, col:52> col:48 D
>       |-TemplateTypeParmDecl 0x8595c20 <col:23, col:32> col:32 typename V
>       `-CXXRecordDecl 0x85962a0 parent 0x8595cf0 prev 0x8595ff0 <col:1,
>     col:52> col:48 struct D definition
>         `-CXXRecordDecl 0x8596440 <col:35, col:48> col:48 implicit struct D
> 
>     Reading the dump we can note that the range of outer node
>     ClassTemplateDecl (col 13-52) is smaller than the one of inner node
>     CXXRecordDecl (col 1-52).
> 
>     This violates an (IMHO) important invariant where it is expected that
>     inner nodes have a range that is a subset or equal to range of outer
>     nodes.
> 
>     I'd think that the CXXRecordDecl range should begin from col 35 and the
>     ClassTemplateDecl range should begin from col 1.
> 
>     Does this sound reasonable?
> 
> 
> Yes.

Thanks, Richard.

I've filed this bug in http://llvm.org/bugs/show_bug.cgi?id=22472


-- 
Abramo Bagnara

BUGSENG srl - http://bugseng.com
mailto:abramo.bagnara at bugseng.com



More information about the cfe-commits mailing list