diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h --- a/clang/include/clang/AST/Expr.h +++ b/clang/include/clang/AST/Expr.h @@ -5463,8 +5463,8 @@ SourceLocation LParenLoc, RParenLoc; /// Build a paren list. - ParenListExpr(SourceLocation LParenLoc, ArrayRef Exprs, - SourceLocation RParenLoc); + ParenListExpr(const ASTContext &C, SourceLocation LParenLoc, + ArrayRef Exprs, SourceLocation RParenLoc); /// Build an empty paren list. ParenListExpr(EmptyShell Empty, unsigned NumExprs); diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -2105,7 +2105,7 @@ InitListExpr::InitListExpr(const ASTContext &C, SourceLocation lbraceloc, ArrayRef initExprs, SourceLocation rbraceloc) - : Expr(InitListExprClass, QualType(), VK_RValue, OK_Ordinary), + : Expr(InitListExprClass, QualType(C.VoidTy), VK_RValue, OK_Ordinary), InitExprs(C, initExprs.size()), LBraceLoc(lbraceloc), RBraceLoc(rbraceloc), AltForm(nullptr, true) { sawArrayRangeDesignator(false); @@ -4289,9 +4289,9 @@ return getBase()->getEndLoc(); } -ParenListExpr::ParenListExpr(SourceLocation LParenLoc, ArrayRef Exprs, - SourceLocation RParenLoc) - : Expr(ParenListExprClass, QualType(), VK_RValue, OK_Ordinary), +ParenListExpr::ParenListExpr(const ASTContext &C, SourceLocation LParenLoc, + ArrayRef Exprs, SourceLocation RParenLoc) + : Expr(ParenListExprClass, QualType(C.VoidTy), VK_RValue, OK_Ordinary), LParenLoc(LParenLoc), RParenLoc(RParenLoc) { ParenListExprBits.NumExprs = Exprs.size(); @@ -4311,7 +4311,7 @@ SourceLocation RParenLoc) { void *Mem = Ctx.Allocate(totalSizeToAlloc(Exprs.size()), alignof(ParenListExpr)); - return new (Mem) ParenListExpr(LParenLoc, Exprs, RParenLoc); + return new (Mem) ParenListExpr(Ctx, LParenLoc, Exprs, RParenLoc); } ParenListExpr *ParenListExpr::CreateEmpty(const ASTContext &Ctx, diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -7021,10 +7021,7 @@ } } - InitListExpr *E = new (Context) InitListExpr(Context, LBraceLoc, InitArgList, - RBraceLoc); - E->setType(Context.VoidTy); // FIXME: just a place holder for now. - return E; + return new (Context) InitListExpr(Context, LBraceLoc, InitArgList, RBraceLoc); } /// Do an explicit extend of the given block pointer if we're in ARC. diff --git a/clang/test/AST/ast-dump-expr-json.cpp b/clang/test/AST/ast-dump-expr-json.cpp --- a/clang/test/AST/ast-dump-expr-json.cpp +++ b/clang/test/AST/ast-dump-expr-json.cpp @@ -4036,7 +4036,7 @@ // CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "NULL TYPE" +// CHECK-NEXT: "qualType": "void" // CHECK-NEXT: }, // CHECK-NEXT: "valueCategory": "rvalue", // CHECK-NEXT: "inner": [ @@ -4247,7 +4247,7 @@ // CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "NULL TYPE" +// CHECK-NEXT: "qualType": "void" // CHECK-NEXT: }, // CHECK-NEXT: "valueCategory": "rvalue", // CHECK-NEXT: "inner": [ @@ -5022,7 +5022,7 @@ // CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "NULL TYPE" +// CHECK-NEXT: "qualType": "void" // CHECK-NEXT: }, // CHECK-NEXT: "valueCategory": "rvalue", // CHECK-NEXT: "inner": [ @@ -6602,7 +6602,7 @@ // CHECK-NEXT: } // CHECK-NEXT: }, // CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "NULL TYPE" +// CHECK-NEXT: "qualType": "void" // CHECK-NEXT: }, // CHECK-NEXT: "valueCategory": "rvalue", // CHECK-NEXT: "inner": [ diff --git a/clang/test/AST/ast-dump-expr.cpp b/clang/test/AST/ast-dump-expr.cpp --- a/clang/test/AST/ast-dump-expr.cpp +++ b/clang/test/AST/ast-dump-expr.cpp @@ -280,7 +280,7 @@ // CHECK-NEXT: CXXMethodDecl // CHECK-NEXT: CompoundStmt // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} col:8 implicit 'V' - // CHECK-NEXT: ParenListExpr 0x{{[^ ]*}} 'NULL TYPE' + // CHECK-NEXT: ParenListExpr 0x{{[^ ]*}} 'void' // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} '' prefix '*' cannot overflow // CHECK-NEXT: CXXThisExpr 0x{{[^ ]*}} 'V *' this } @@ -335,7 +335,7 @@ // CHECK-NEXT: CXXMethodDecl 0x{{[^ ]*}} col:3 operator() 'auto () const -> auto' inline // CHECK-NEXT: CompoundStmt // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} col:4 implicit 'Ts...' - // CHECK-NEXT: ParenListExpr 0x{{[^ ]*}} 'NULL TYPE' + // CHECK-NEXT: ParenListExpr 0x{{[^ ]*}} 'void' // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'Ts' lvalue ParmVar 0x{{[^ ]*}} 'a' 'Ts...' // CHECK-NEXT: CompoundStmt 0x{{[^ ]*}} @@ -448,7 +448,7 @@ // CHECK-NEXT: CompoundStmt // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} col:4 implicit 'Ts...' // CHECK-NEXT: FieldDecl 0x{{[^ ]*}} col:10 implicit 'int':'int' - // CHECK-NEXT: ParenListExpr 0x{{[^ ]*}} 'NULL TYPE' + // CHECK-NEXT: ParenListExpr 0x{{[^ ]*}} 'void' // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'Ts' lvalue ParmVar 0x{{[^ ]*}} 'a' 'Ts...' // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} 'int' 12 // CHECK-NEXT: CompoundStmt 0x{{[^ ]*}} diff --git a/clang/test/AST/ast-dump-lambda.cpp b/clang/test/AST/ast-dump-lambda.cpp --- a/clang/test/AST/ast-dump-lambda.cpp +++ b/clang/test/AST/ast-dump-lambda.cpp @@ -65,7 +65,7 @@ // CHECK-NEXT: | | | |-CXXMethodDecl {{.*}} col:7{{( imported)?}} operator() 'auto () const -> auto' inline // CHECK-NEXT: | | | | `-CompoundStmt {{.*}} // CHECK-NEXT: | | | `-FieldDecl {{.*}} col:8{{( imported)?}} implicit 'V *' -// CHECK-NEXT: | | |-ParenListExpr {{.*}} 'NULL TYPE' +// CHECK-NEXT: | | |-ParenListExpr {{.*}} 'void' // CHECK-NEXT: | | | `-CXXThisExpr {{.*}} 'V *' this // CHECK-NEXT: | | `-CompoundStmt {{.*}} // CHECK-NEXT: | `-LambdaExpr {{.*}} '(lambda at {{.*}}ast-dump-lambda.cpp:19:7)' @@ -80,7 +80,7 @@ // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} col:7{{( imported)?}} operator() 'auto () const -> auto' inline // CHECK-NEXT: | | | `-CompoundStmt {{.*}} // CHECK-NEXT: | | `-FieldDecl {{.*}} col:8{{( imported)?}} implicit 'V' -// CHECK-NEXT: | |-ParenListExpr {{.*}} 'NULL TYPE' +// CHECK-NEXT: | |-ParenListExpr {{.*}} 'void' // CHECK-NEXT: | | `-UnaryOperator {{.*}} '' prefix '*' cannot overflow // CHECK-NEXT: | | `-CXXThisExpr {{.*}} 'V *' this // CHECK-NEXT: | `-CompoundStmt {{.*}} @@ -129,7 +129,7 @@ // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} col:3{{( imported)?}} operator() 'auto () const -> auto' inline // CHECK-NEXT: | | | `-CompoundStmt {{.*}} // CHECK-NEXT: | | `-FieldDecl {{.*}} col:4{{( imported)?}} implicit 'Ts...' -// CHECK-NEXT: | |-ParenListExpr {{.*}} 'NULL TYPE' +// CHECK-NEXT: | |-ParenListExpr {{.*}} 'void' // CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'Ts' lvalue ParmVar {{.*}} 'a' 'Ts...' // CHECK-NEXT: | `-CompoundStmt {{.*}} // CHECK-NEXT: |-LambdaExpr {{.*}} '(lambda at {{.*}}ast-dump-lambda.cpp:26:3)' @@ -230,7 +230,7 @@ // CHECK-NEXT: | | | `-CompoundStmt {{.*}} // CHECK-NEXT: | | |-FieldDecl {{.*}} col:4{{( imported)?}} implicit 'Ts...' // CHECK-NEXT: | | `-FieldDecl {{.*}} col:10{{( imported)?}} implicit 'int':'int' -// CHECK-NEXT: | |-ParenListExpr {{.*}} 'NULL TYPE' +// CHECK-NEXT: | |-ParenListExpr {{.*}} 'void' // CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'Ts' lvalue ParmVar {{.*}} 'a' 'Ts...' // CHECK-NEXT: | |-IntegerLiteral {{.*}} 'int' 12 // CHECK-NEXT: | `-CompoundStmt {{.*}} diff --git a/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp b/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp --- a/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp +++ b/clang/test/AST/ast-dump-openmp-begin-declare-variant_template_3.cpp @@ -115,7 +115,7 @@ // CHECK-NEXT: | | | `-VarDecl [[ADDR_45:0x[a-z0-9]*]] col:10 referenced t 'double' // CHECK-NEXT: | | |-DeclStmt [[ADDR_46:0x[a-z0-9]*]] // CHECK-NEXT: | | | `-VarDecl [[ADDR_47:0x[a-z0-9]*]] col:8 q 'S' callinit -// CHECK-NEXT: | | | `-ParenListExpr [[ADDR_48:0x[a-z0-9]*]] 'NULL TYPE' +// CHECK-NEXT: | | | `-ParenListExpr [[ADDR_48:0x[a-z0-9]*]] 'void' // CHECK-NEXT: | | | |-IntegerLiteral [[ADDR_49:0x[a-z0-9]*]] 'int' 1 // CHECK-NEXT: | | | `-UnaryOperator [[ADDR_50:0x[a-z0-9]*]] 'double *' prefix '&' cannot overflow // CHECK-NEXT: | | | `-DeclRefExpr [[ADDR_51:0x[a-z0-9]*]] 'double' {{.*}}Var [[ADDR_45]] 't' 'double' @@ -150,7 +150,7 @@ // CHECK-NEXT: | | | `-VarDecl [[ADDR_73:0x[a-z0-9]*]] col:5 referenced t 'T' // CHECK-NEXT: | | |-DeclStmt [[ADDR_74:0x[a-z0-9]*]] // CHECK-NEXT: | | | `-VarDecl [[ADDR_75:0x[a-z0-9]*]] col:8 q 'S' callinit -// CHECK-NEXT: | | | `-ParenListExpr [[ADDR_76:0x[a-z0-9]*]] 'NULL TYPE' +// CHECK-NEXT: | | | `-ParenListExpr [[ADDR_76:0x[a-z0-9]*]] 'void' // CHECK-NEXT: | | | |-IntegerLiteral [[ADDR_77:0x[a-z0-9]*]] 'int' 0 // CHECK-NEXT: | | | `-UnaryOperator [[ADDR_78:0x[a-z0-9]*]] '' prefix '&' cannot overflow // CHECK-NEXT: | | | `-DeclRefExpr [[ADDR_79:0x[a-z0-9]*]] 'T' {{.*}}Var [[ADDR_73]] 't' 'T' @@ -186,7 +186,7 @@ // CHECK-NEXT: | | `-VarDecl [[ADDR_102:0x[a-z0-9]*]] col:10 referenced t 'double' // CHECK-NEXT: | |-DeclStmt [[ADDR_103:0x[a-z0-9]*]] // CHECK-NEXT: | | `-VarDecl [[ADDR_104:0x[a-z0-9]*]] col:8 q 'S' callinit -// CHECK-NEXT: | | `-ParenListExpr [[ADDR_105:0x[a-z0-9]*]] 'NULL TYPE' +// CHECK-NEXT: | | `-ParenListExpr [[ADDR_105:0x[a-z0-9]*]] 'void' // CHECK-NEXT: | | |-FloatingLiteral [[ADDR_106:0x[a-z0-9]*]] 'double' 2.000000e+00 // CHECK-NEXT: | | `-UnaryOperator [[ADDR_107:0x[a-z0-9]*]] 'double *' prefix '&' cannot overflow // CHECK-NEXT: | | `-DeclRefExpr [[ADDR_108:0x[a-z0-9]*]] 'double' {{.*}}Var [[ADDR_102]] 't' 'double' diff --git a/clang/test/AST/ast-dump-recovery.cpp b/clang/test/AST/ast-dump-recovery.cpp --- a/clang/test/AST/ast-dump-recovery.cpp +++ b/clang/test/AST/ast-dump-recovery.cpp @@ -173,7 +173,7 @@ // CHECK-NEDT: `-DeclRefExpr {{.*}} 'x' Bar a3{x}; // CHECK: `-VarDecl {{.*}} a4 'Bar' - // CHECK-NEXT: `-ParenListExpr {{.*}} 'NULL TYPE' contains-errors + // CHECK-NEXT: `-ParenListExpr {{.*}} contains-errors // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid' Bar a4(invalid()); diff --git a/clang/test/AST/ast-dump-templates.cpp b/clang/test/AST/ast-dump-templates.cpp --- a/clang/test/AST/ast-dump-templates.cpp +++ b/clang/test/AST/ast-dump-templates.cpp @@ -67,3 +67,7 @@ template A(T) -> A; // CHECK1: template A(T) -> A; } + +template constexpr T var(0); +// DUMP: VarDecl {{.*}} col:35 var 'const T' constexpr callinit +// DUMP-NEXT: ParenListExpr {{.*}} 'void'