summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/AST/ASTDumper.cpp20
-rw-r--r--clang/test/Misc/ast-dump-stmt.cpp10
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'$}}
OpenPOWER on IntegriCloud