| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // RUN: %clang_cc1 -fcxx-exceptions -ast-dump -ast-dump-filter Test %s | FileCheck -strict-whitespace %s
- namespace n {
- void function() {}
- int Variable;
- }
- using n::function;
- using n::Variable;
- void TestFunction() {
- void (*f)() = &function;
- // CHECK: DeclRefExpr{{.*}} (UsingShadow{{.*}}function
- Variable = 4;
- // CHECK: DeclRefExpr{{.*}} (UsingShadow{{.*}}Variable
- }
- // CHECK: FunctionDecl {{.*}} TestCatch1
- void TestCatch1() {
- // CHECK: CXXTryStmt
- // CHECK-NEXT: CompoundStmt
- try {
- }
- // CHECK-NEXT: CXXCatchStmt
- // CHECK-NEXT: VarDecl {{.*}} x
- // CHECK-NEXT: CompoundStmt
- catch (int x) {
- }
- }
- // CHECK: FunctionDecl {{.*}} TestCatch2
- void TestCatch2() {
- // CHECK: CXXTryStmt
- // CHECK-NEXT: CompoundStmt
- try {
- }
- // CHECK-NEXT: CXXCatchStmt
- // CHECK-NEXT: NULL
- // CHECK-NEXT: CompoundStmt
- catch (...) {
- }
- }
- void TestAllocationExprs() {
- int *p;
- p = new int;
- delete p;
- p = new int[2];
- delete[] p;
- p = ::new int;
- ::delete p;
- }
- // CHECK: FunctionDecl {{.*}} TestAllocationExprs
- // CHECK: CXXNewExpr {{.*}} 'int *' Function {{.*}} 'operator new'
- // CHECK: CXXDeleteExpr {{.*}} 'void' Function {{.*}} 'operator delete'
- // CHECK: CXXNewExpr {{.*}} 'int *' array Function {{.*}} 'operator new[]'
- // 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'$}}
|