-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Closed
Labels
clang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"
Description
Consider:
namespace ns1 {
template <typename TA1, bool TA2>
struct Template1 {};
template <typename TB1, bool TB2>
struct Template2 {};
template <typename U1, bool U2, bool U3>
struct Template2<Template1<U1, U2>, U3> {};
}
namespace ns2 {
template <typename TA1, bool TA2>
struct Template1 {};
template <typename TB1, bool TB2>
struct Template2 {};
template <typename U1, bool U3, bool U2>
struct Template2<Template1<U1, U2>, U3> {};
}The difference between the class templates in the 2 namespaces is: typename U1, bool U3, bool U2 instead of typename U1, bool U2, bool U3 in the class template partial specialization.
A repro dump is provided.
While the expected difference is just the template parameter order, this is not the case.
The AST difference is:
| |-TemplateArgument type 'Template1<type-parameter-0-0, TA2>'
| | `-TemplateSpecializationType 'Template1<type-parameter-0-0, TA2>' dependent Template1
| | |-TemplateArgument type 'type-parameter-0-0'
| | | `-TemplateTypeParmType 'type-parameter-0-0' dependent depth 0 index 0
| | `-TemplateArgument expr
| | `-DeclRefExpr <line:2:31> 'bool' NonTypeTemplateParm 0xcf3a360 'TA2' 'bool'
| |-TemplateArgument expr
| | `-DeclRefExpr <line:11:38> 'bool' NonTypeTemplateParm 0xcf3ada8 'U3' 'bool'
| |-TemplateArgument type 'Template1<type-parameter-0-0, U2>'
| | `-TemplateSpecializationType 'Template1<type-parameter-0-0, U2>' dependent Template1
| | |-TemplateArgument type 'type-parameter-0-0'
| | | `-TemplateTypeParmType 'type-parameter-0-0' dependent depth 0 index 0
| | `-TemplateArgument expr
| | `-DeclRefExpr <col:33> 'bool' NonTypeTemplateParm 0xcf5a4f8 'U2' 'bool'
| |-TemplateArgument expr
| | `-DeclRefExpr <col:38> 'bool' NonTypeTemplateParm 0xcf5a490 'U3' 'bool'
Why the clang::NonTypeTemplateParm TA2 is present? Even though it is not in the current semantic context.
I really think this is a bug, and the second result should be the correct one.
Thanks.
Metadata
Metadata
Assignees
Labels
clang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"