diff options
-rw-r--r-- | clang/lib/AST/ASTDumper.cpp | 20 | ||||
-rw-r--r-- | clang/test/Misc/ast-dump-stmt.cpp | 10 |
2 files changed, 22 insertions, 8 deletions
diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp index 6aa0a2183d8..a5ad6db3797 100644 --- a/clang/lib/AST/ASTDumper.cpp +++ b/clang/lib/AST/ASTDumper.cpp @@ -1921,24 +1921,28 @@ void ASTDumper::VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *Node) { void ASTDumper::VisitCXXNewExpr(const CXXNewExpr *Node) { VisitExpr(Node); - OS << ' '; if (Node->isGlobalNew()) - OS << "global "; + OS << " global"; if (Node->isArray()) - OS << "array "; - dumpBareDeclRef(Node->getOperatorNew()); + OS << " array"; + if (Node->getOperatorNew()) { + OS << ' '; + dumpBareDeclRef(Node->getOperatorNew()); + } // We could dump the deallocation function used in case of error, but it's // usually not that interesting. } void ASTDumper::VisitCXXDeleteExpr(const CXXDeleteExpr *Node) { VisitExpr(Node); - OS << ' '; if (Node->isGlobalDelete()) - OS << "global "; + OS << " global"; if (Node->isArrayForm()) - OS << "array "; - dumpBareDeclRef(Node->getOperatorDelete()); + OS << " array"; + if (Node->getOperatorDelete()) { + OS << ' '; + dumpBareDeclRef(Node->getOperatorDelete()); + } } void diff --git a/clang/test/Misc/ast-dump-stmt.cpp b/clang/test/Misc/ast-dump-stmt.cpp index 472c71365e1..96921ff7b6e 100644 --- a/clang/test/Misc/ast-dump-stmt.cpp +++ b/clang/test/Misc/ast-dump-stmt.cpp @@ -55,3 +55,13 @@ void TestAllocationExprs() { // CHECK: CXXDeleteExpr {{.*}} 'void' array Function {{.*}} 'operator delete[]' // CHECK: CXXNewExpr {{.*}} 'int *' global Function {{.*}} 'operator new' // CHECK: CXXDeleteExpr {{.*}} 'void' global Function {{.*}} 'operator delete' + +// Don't crash on dependent exprs that haven't been resolved yet. +template <typename T> +void TestDependentAllocationExpr() { + T *p = new T; + delete p; +} +// CHECK: FunctionTemplateDecl {{.*}} TestDependentAllocationExpr +// CHECK: CXXNewExpr {{.*'T \*'$}} +// CHECK: CXXDeleteExpr {{.*'void'$}} |