[cfe-dev] Semantic form of InitListExpr node not flagged as value dependent.

Enea Zaffanella zaffanella at cs.unipr.it
Fri May 25 06:35:38 PDT 2012


We have found a problem when visiting the AST for the following code:
=========================
template <int>
struct A {
   static const int i;
};

template <int N>
const int A<N>::i = { N };
=========================

When visiting the initializer of the out-of-line static field 
definition, we see:

(gdb) p node
$18 = (clang::InitListExpr *) 0x2ffd680
(gdb) call node->dump()
(InitListExpr 0x2ffd680 'int'
   (DeclRefExpr 0x2ffd610 'int' NonTypeTemplateParm 0x2ffd2a0 'N' 'int'))
(gdb) p node->isValueDependent()
$19 = false
(gdb) p node->getSyntacticForm()
$20 = (clang::InitListExpr *) 0x2ffd638
(gdb) call node->getSyntacticForm()->dump()
(InitListExpr 0x2ffd638 'int'
   (DeclRefExpr 0x2ffd610 'int' NonTypeTemplateParm 0x2ffd2a0 'N' 'int'))
(gdb) p node->getSyntacticForm()->isValueDependent()
$21 = true

That is, the syntactic form of the init list expr is (correctly) flagged 
as value dependent, but the semantic form is not.

Enea.



More information about the cfe-dev mailing list