2013-09-04 22:35:00 +08:00
|
|
|
// RUN: %clang_cc1 -fcxx-exceptions -ast-dump -ast-dump-filter Test %s | FileCheck -strict-whitespace %s
|
2013-03-22 18:01:35 +08:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2013-09-04 22:35:00 +08:00
|
|
|
|
|
|
|
// 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 (...) {
|
|
|
|
}
|
|
|
|
}
|
2015-03-20 02:09:25 +08:00
|
|
|
|
|
|
|
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'
|
2015-03-20 02:47:47 +08:00
|
|
|
|
|
|
|
// 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'$}}
|
2016-11-09 22:02:18 +08:00
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
class DependentScopeMemberExprWrapper {
|
|
|
|
T member;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
void TestDependentScopeMemberExpr() {
|
|
|
|
DependentScopeMemberExprWrapper<T> obj;
|
|
|
|
obj.member = T();
|
|
|
|
(&obj)->member = T();
|
|
|
|
}
|
|
|
|
|
|
|
|
// CHECK: FunctionTemplateDecl {{.*}} TestDependentScopeMemberExpr
|
|
|
|
// CHECK: CXXDependentScopeMemberExpr {{.*}} lvalue .member
|
|
|
|
// CHECK: CXXDependentScopeMemberExpr {{.*}} lvalue ->member
|