diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-03-19 18:47:47 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-03-19 18:47:47 +0000 |
commit | 461c0c693421fe7fb37da598632fca9c02c4c5d1 (patch) | |
tree | 49792ec1914fe1848a58c64da5b6d40b92530600 /clang | |
parent | 5196fe7c197a56548a4df99287e08ad3903927ff (diff) | |
download | bcm5719-llvm-461c0c693421fe7fb37da598632fca9c02c4c5d1.tar.gz bcm5719-llvm-461c0c693421fe7fb37da598632fca9c02c4c5d1.zip |
Fix -ast-dump of dependent new and delete exprs
llvm-svn: 232748
Diffstat (limited to 'clang')
-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'$}} |