diff options
Diffstat (limited to 'test/Import')
46 files changed, 760 insertions, 1 deletions
diff --git a/test/Import/array-init-loop-expr/Inputs/S.cpp b/test/Import/array-init-loop-expr/Inputs/S.cpp new file mode 100644 index 000000000000..5ca3ad47b278 --- /dev/null +++ b/test/Import/array-init-loop-expr/Inputs/S.cpp @@ -0,0 +1,8 @@ +class S { + int a[10]; +}; + +void f() { + S s; + S copy = s; +} diff --git a/test/Import/array-init-loop-expr/test.cpp b/test/Import/array-init-loop-expr/test.cpp new file mode 100644 index 000000000000..7fe109c305dd --- /dev/null +++ b/test/Import/array-init-loop-expr/test.cpp @@ -0,0 +1,10 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s | FileCheck %s +// CHECK: CXXCtorInitializer +// CHECK-NEXT: ArrayInitLoopExpr +// CHECK-SAME: 'int [10]' + +// CHECK: ArrayInitIndexExpr + +void expr() { + f(); +} diff --git a/test/Import/call-expr/Inputs/F.cpp b/test/Import/call-expr/Inputs/F.cpp new file mode 100644 index 000000000000..bd88df99ba41 --- /dev/null +++ b/test/Import/call-expr/Inputs/F.cpp @@ -0,0 +1,10 @@ +namespace NS { +struct X {}; +void f(X) {} +void operator+(X, X) {} +} // namespace NS +void f() { + NS::X x; + f(x); + x + x; +} diff --git a/test/Import/call-expr/test.cpp b/test/Import/call-expr/test.cpp new file mode 100644 index 000000000000..86c1b50c47d6 --- /dev/null +++ b/test/Import/call-expr/test.cpp @@ -0,0 +1,8 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s +void expr() { + f(); +} + +// CHECK: FunctionDecl 0x{{[^ ]*}} <{{[^>]*}}> line:{{.*}}:{{[^ ]*}} used f 'void ()' +// CHECK: -CallExpr 0x{{[^ ]*}} <{{[^>]*}}> 'void' adl +// CHECK: -CXXOperatorCallExpr 0x{{[^ ]*}} <{{[^>]*}}> 'void' adl diff --git a/test/Import/compound-assign-op/Inputs/F.cpp b/test/Import/compound-assign-op/Inputs/F.cpp new file mode 100644 index 000000000000..f925ae5ef6ed --- /dev/null +++ b/test/Import/compound-assign-op/Inputs/F.cpp @@ -0,0 +1,18 @@ +void f() { + unsigned iadd_eq = 0U; + iadd_eq += 1U; + unsigned isub_eq = 0U; + isub_eq -= 1U; + unsigned imul_eq = 0U; + imul_eq *= 1U; + unsigned idiv_eq = 0U; + idiv_eq /= 1U; + unsigned iand_eq = 0U; + iand_eq &= 1U; + unsigned ixor_eq = 0U; + ixor_eq ^= 1U; + unsigned ilsh_eq = 0U; + ilsh_eq <<= 1U; + unsigned irsh_eq = 0U; + irsh_eq >>= 1U; +} diff --git a/test/Import/compound-assign-op/test.cpp b/test/Import/compound-assign-op/test.cpp new file mode 100644 index 000000000000..415358ddbf99 --- /dev/null +++ b/test/Import/compound-assign-op/test.cpp @@ -0,0 +1,45 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '+=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '-=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '*=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '/=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '&=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '^=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '<<=' + +// CHECK: VarDecl +// CHECK-NEXT: Integer +// CHECK-NEXT: CompoundAssignOperator +// CHECK-SAME: '>>=' + +void expr() { + f(); +} diff --git a/test/Import/conversion-decl/Inputs/F.cpp b/test/Import/conversion-decl/Inputs/F.cpp new file mode 100644 index 000000000000..b1776b0b26a5 --- /dev/null +++ b/test/Import/conversion-decl/Inputs/F.cpp @@ -0,0 +1,10 @@ +class Y { + int M; +}; + +class X { + int N, M; + +public: + operator Y(); +}; diff --git a/test/Import/conversion-decl/test.cpp b/test/Import/conversion-decl/test.cpp new file mode 100644 index 000000000000..dc9e6d85dd34 --- /dev/null +++ b/test/Import/conversion-decl/test.cpp @@ -0,0 +1,5 @@ +// RUN: clang-import-test -import %S/Inputs/F.cpp -expression %s +void expr() { + X X1; + Y Y1 = X1; +} diff --git a/test/Import/cxx-casts/Inputs/F.cpp b/test/Import/cxx-casts/Inputs/F.cpp new file mode 100644 index 000000000000..79326a7e4b28 --- /dev/null +++ b/test/Import/cxx-casts/Inputs/F.cpp @@ -0,0 +1,12 @@ +struct A { + virtual ~A() {} +}; +struct B : public A {}; + +void f() { + const A *b = new B(); + const B *c1 = dynamic_cast<const B *>(b); + const B *c2 = static_cast<const B *>(b); + const B *c3 = reinterpret_cast<const B *>(b); + A *c4 = const_cast<A *>(b); +} diff --git a/test/Import/cxx-casts/test.cpp b/test/Import/cxx-casts/test.cpp new file mode 100644 index 000000000000..49215ce81c7b --- /dev/null +++ b/test/Import/cxx-casts/test.cpp @@ -0,0 +1,21 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: CXXDynamicCastExpr +// CHECK-SAME: dynamic_cast +// CHECK-SAME: <Dynamic> + +// CHECK: CXXStaticCastExpr +// CHECK-SAME: static_cast +// CHECK-SAME: <BaseToDerived (A)> + +// CHECK: CXXReinterpretCastExpr +// CHECK-SAME: reinterpret_cast +// CHECK-SAME: <BitCast> + +// CHECK: CXXConstCastExpr +// CHECK-SAME: const_cast +// CHECK-SAME: <NoOp> + +void expr() { + f(); +} diff --git a/test/Import/cxx-default-init-expr/Inputs/S.cpp b/test/Import/cxx-default-init-expr/Inputs/S.cpp new file mode 100644 index 000000000000..2b83b5d2eedc --- /dev/null +++ b/test/Import/cxx-default-init-expr/Inputs/S.cpp @@ -0,0 +1,9 @@ +struct Foo { + int i; +}; + +struct S { + int int_member = 3; + float float_member = 3.0f; + Foo class_member = Foo(); +}; diff --git a/test/Import/cxx-default-init-expr/test.cpp b/test/Import/cxx-default-init-expr/test.cpp new file mode 100644 index 000000000000..a50b12b83e0d --- /dev/null +++ b/test/Import/cxx-default-init-expr/test.cpp @@ -0,0 +1,22 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s | FileCheck %s +// CHECK: CXXCtorInitializer +// CHECK-SAME: 'int_member' +// CHECK-SAME: 'int' +// CHECK-NEXT: CXXDefaultInitExpr +// CHECK-SAME: 'int' + +// CHECK-NEXT: CXXCtorInitializer +// CHECK-SAME: 'float_member' +// CHECK-SAME: 'float' +// CHECK-NEXT: CXXDefaultInitExpr +// CHECK-SAME: 'float' + +// CHECK-NEXT: CXXCtorInitializer +// CHECK-SAME: 'class_member' +// CHECK-SAME: 'Foo' +// CHECK-NEXT: CXXDefaultInitExpr +// CHECK-SAME: 'Foo' + +void expr() { + struct S s; +} diff --git a/test/Import/cxx-for-range/Inputs/F.cpp b/test/Import/cxx-for-range/Inputs/F.cpp new file mode 100644 index 000000000000..26a3a4e1d3fa --- /dev/null +++ b/test/Import/cxx-for-range/Inputs/F.cpp @@ -0,0 +1,10 @@ +struct Container { + int *begin(); + int *end(); +}; + +void f() { + for (Container c; int varname : c) { + return; + } +} diff --git a/test/Import/cxx-for-range/test.cpp b/test/Import/cxx-for-range/test.cpp new file mode 100644 index 000000000000..019fc20bee1e --- /dev/null +++ b/test/Import/cxx-for-range/test.cpp @@ -0,0 +1,58 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: CXXForRangeStmt + +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: c 'Container' +// CHECK-NEXT: CXXConstructExpr + +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: 'c' +// CHECK-SAME: Container + +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: CXXMemberCallExpr +// CHECK-SAME: 'int *' +// CHECK-NEXT: MemberExpr +// CHECK-SAME: .begin +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: '__range1' +// CHECK-SAME: Container + +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: CXXMemberCallExpr +// CHECK-SAME: 'int *' +// CHECK-NEXT: MemberExpr +// CHECK-SAME: .end +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: '__range1' +// CHECK-SAME: Container + +// CHECK-NEXT: BinaryOperator +// CHECK-SAME: '!=' +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: '__begin1' +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: '__end1' + +// CHECK-NEXT: UnaryOperator +// CHECK-SAME: '++' +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: '__begin1' + +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname + +// CHECK: ReturnStmt + +void expr() { + f(); +} diff --git a/test/Import/cxx-member-pointers/Inputs/S.cpp b/test/Import/cxx-member-pointers/Inputs/S.cpp new file mode 100644 index 000000000000..afee60de3268 --- /dev/null +++ b/test/Import/cxx-member-pointers/Inputs/S.cpp @@ -0,0 +1,7 @@ +struct S { + int i; +}; + +int S::*iptr() { + return &S::i; +} diff --git a/test/Import/cxx-member-pointers/test.cpp b/test/Import/cxx-member-pointers/test.cpp new file mode 100644 index 000000000000..253c90bdcf7e --- /dev/null +++ b/test/Import/cxx-member-pointers/test.cpp @@ -0,0 +1,16 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s | FileCheck %s + +// CHECK: VarDecl +// CHECK-SAME: int S::* +// CHECK-NEXT: CallExpr +// CHECK-NEXT: ImplicitCastExpr +// CHECK-SAME: int S::*(*)() +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: int S::*() + +void expr() { + int S::*p = iptr(); + S s; + s.i = 3; + int i = s.*p; +} diff --git a/test/Import/cxx-noexcept-expr/Inputs/F.cpp b/test/Import/cxx-noexcept-expr/Inputs/F.cpp new file mode 100644 index 000000000000..2c48ad652a6e --- /dev/null +++ b/test/Import/cxx-noexcept-expr/Inputs/F.cpp @@ -0,0 +1 @@ +bool f() { return noexcept(1); } diff --git a/test/Import/cxx-noexcept-expr/test.cpp b/test/Import/cxx-noexcept-expr/test.cpp new file mode 100644 index 000000000000..090a4eb7e647 --- /dev/null +++ b/test/Import/cxx-noexcept-expr/test.cpp @@ -0,0 +1,8 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: CXXNoexceptExpr +// CHECK-NEXT: IntegerLiteral + +void expr() { + f(); +} diff --git a/test/Import/cxx-scalar-value-init/Inputs/S.cpp b/test/Import/cxx-scalar-value-init/Inputs/S.cpp new file mode 100644 index 000000000000..153d960699b0 --- /dev/null +++ b/test/Import/cxx-scalar-value-init/Inputs/S.cpp @@ -0,0 +1,2 @@ +int si() { return int(); } +float sf() { return float(); } diff --git a/test/Import/cxx-scalar-value-init/test.cpp b/test/Import/cxx-scalar-value-init/test.cpp new file mode 100644 index 000000000000..596710911cc8 --- /dev/null +++ b/test/Import/cxx-scalar-value-init/test.cpp @@ -0,0 +1,11 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s | FileCheck %s +// CHECK: CXXScalarValueInitExpr +// CHECK-SAME: 'int' + +// CHECK: CXXScalarValueInitExpr +// CHECK-SAME: 'float' + +void expr() { + int i = si(); + float f = sf(); +} diff --git a/test/Import/cxx-try-catch/Inputs/F.cpp b/test/Import/cxx-try-catch/Inputs/F.cpp new file mode 100644 index 000000000000..4e06f3599bb4 --- /dev/null +++ b/test/Import/cxx-try-catch/Inputs/F.cpp @@ -0,0 +1,18 @@ +void f() { + try { + } catch (...) { + } + + try { + } catch (int) { + } + + try { + } catch (int varname) { + } + + try { + } catch (int varname1) { + } catch (long varname2) { + } +} diff --git a/test/Import/cxx-try-catch/test.cpp b/test/Import/cxx-try-catch/test.cpp new file mode 100644 index 000000000000..079e35b3e7d3 --- /dev/null +++ b/test/Import/cxx-try-catch/test.cpp @@ -0,0 +1,39 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: CXXTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CXXCatchStmt +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: CompoundStmt + +// CHECK: CXXTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CXXCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: 'int' +// CHECK-NEXT: CompoundStmt + +// CHECK: CXXTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CXXCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname +// CHECK-SAME: 'int' +// CHECK-NEXT: CompoundStmt + +// CHECK: CXXTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CXXCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname1 +// CHECK-SAME: 'int' +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CXXCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname2 +// CHECK-SAME: 'long' +// CHECK-NEXT: CompoundStmt + +void expr() { + f(); +} diff --git a/test/Import/do-stmt/Inputs/F.cpp b/test/Import/do-stmt/Inputs/F.cpp new file mode 100644 index 000000000000..a58efb3a25ca --- /dev/null +++ b/test/Import/do-stmt/Inputs/F.cpp @@ -0,0 +1,7 @@ +void f() { + do + ; + while (true); + do { + } while (false); +} diff --git a/test/Import/do-stmt/test.cpp b/test/Import/do-stmt/test.cpp new file mode 100644 index 000000000000..8b1057dae65b --- /dev/null +++ b/test/Import/do-stmt/test.cpp @@ -0,0 +1,15 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: DoStmt +// CHECK-NEXT: NullStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-SAME: true + +// CHECK: DoStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-SAME: false + +void expr() { + f(); +} diff --git a/test/Import/enum/Inputs/S.cpp b/test/Import/enum/Inputs/S.cpp index 8506c68512db..3179da1daacc 100644 --- a/test/Import/enum/Inputs/S.cpp +++ b/test/Import/enum/Inputs/S.cpp @@ -2,3 +2,5 @@ enum E { a = 1, b = 2 }; + +enum OpaqueWithType : long; diff --git a/test/Import/enum/test.cpp b/test/Import/enum/test.cpp index aa68063cb207..491c3b7cb60d 100644 --- a/test/Import/enum/test.cpp +++ b/test/Import/enum/test.cpp @@ -1,4 +1,8 @@ -// RUN: clang-import-test -import %S/Inputs/S.cpp -expression %s +// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s | FileCheck %s + +// CHECK: OpaqueWithType 'long' + void expr() { static_assert(E::a + E::b == 3); + static_assert(sizeof(OpaqueWithType) == sizeof(long)); } diff --git a/test/Import/expr-with-cleanups/Inputs/S.cpp b/test/Import/expr-with-cleanups/Inputs/S.cpp new file mode 100644 index 000000000000..7b69f48f681e --- /dev/null +++ b/test/Import/expr-with-cleanups/Inputs/S.cpp @@ -0,0 +1,8 @@ +struct RAII { + int i = 0; + RAII() { i++; } + ~RAII() { i--; } +}; +void f() { + RAII(); +} diff --git a/test/Import/expr-with-cleanups/test.cpp b/test/Import/expr-with-cleanups/test.cpp new file mode 100644 index 000000000000..79b76f414ecf --- /dev/null +++ b/test/Import/expr-with-cleanups/test.cpp @@ -0,0 +1,8 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/S.cpp -expression %s | FileCheck %s +// CHECK: ExprWithCleanups +// CHECK-SAME: 'RAII' +// CHECK-NEXT: CXXBindTemporaryExpr + +void expr() { + f(); +} diff --git a/test/Import/for-stmt/Inputs/F.cpp b/test/Import/for-stmt/Inputs/F.cpp new file mode 100644 index 000000000000..e93e35dd6b79 --- /dev/null +++ b/test/Import/for-stmt/Inputs/F.cpp @@ -0,0 +1,11 @@ +void f() { + for (;;) + ; + for (int i = 0;;) + continue; + for (; bool j = false;) + continue; + for (int i = 0; i != 0; ++i) { + i++; + } +} diff --git a/test/Import/for-stmt/test.cpp b/test/Import/for-stmt/test.cpp new file mode 100644 index 000000000000..95895ce6c1db --- /dev/null +++ b/test/Import/for-stmt/test.cpp @@ -0,0 +1,50 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: ForStmt +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: NullStmt + +// CHECK: ForStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: ContinueStmt + +// CHECK: ForStmt +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: 'j' +// CHECK-SAME: 'bool' +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: ContinueStmt + +// CHECK: ForStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: <<NULL>> + +// CHECK-NEXT: BinaryOperator +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-NEXT: IntegerLiteral + +// CHECK-NEXT: UnaryOperator +// CHECK-SAME: '++' +// CHECK-NEXT: DeclRefExpr + +// CHECK-NEXT: CompoundStmt + +void expr() { + f(); +} diff --git a/test/Import/if-stmt/Inputs/F.cpp b/test/Import/if-stmt/Inputs/F.cpp new file mode 100644 index 000000000000..a7062c94ea76 --- /dev/null +++ b/test/Import/if-stmt/Inputs/F.cpp @@ -0,0 +1,21 @@ +void f() { + if (true) + return; + + if (int j = 3) + return; + + if (int j; true) + return; + + if (true) + return; + else + return; + + if (true) { + return; + } else { + return; + } +} diff --git a/test/Import/if-stmt/test.cpp b/test/Import/if-stmt/test.cpp new file mode 100644 index 000000000000..8c92a72c0129 --- /dev/null +++ b/test/Import/if-stmt/test.cpp @@ -0,0 +1,36 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: IfStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: ReturnStmt + +// CHECK: IfStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-NEXT: ReturnStmt + +// CHECK: IfStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: ReturnStmt + +// CHECK: IfStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: ReturnStmt +// CHECK-NEXT: ReturnStmt + +// CHECK: IfStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ReturnStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ReturnStmt + +void expr() { + f(); +} diff --git a/test/Import/indirect-goto/Inputs/F.cpp b/test/Import/indirect-goto/Inputs/F.cpp new file mode 100644 index 000000000000..368b6db40da5 --- /dev/null +++ b/test/Import/indirect-goto/Inputs/F.cpp @@ -0,0 +1,6 @@ +void f() { + void const *l1_ptr = &&l1; + goto *l1_ptr; +l1: + return; +} diff --git a/test/Import/indirect-goto/test.cpp b/test/Import/indirect-goto/test.cpp new file mode 100644 index 000000000000..62be49eea6bc --- /dev/null +++ b/test/Import/indirect-goto/test.cpp @@ -0,0 +1,10 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: IndirectGotoStmt +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: 'l1_ptr' + +void expr() { + f(); +} diff --git a/test/Import/objc-autoreleasepool/Inputs/F.m b/test/Import/objc-autoreleasepool/Inputs/F.m new file mode 100644 index 000000000000..0236cdf8f632 --- /dev/null +++ b/test/Import/objc-autoreleasepool/Inputs/F.m @@ -0,0 +1,5 @@ +void f() { + @autoreleasepool { + return; + } +} diff --git a/test/Import/objc-autoreleasepool/test.m b/test/Import/objc-autoreleasepool/test.m new file mode 100644 index 000000000000..f09e7ef4dddf --- /dev/null +++ b/test/Import/objc-autoreleasepool/test.m @@ -0,0 +1,9 @@ +// RUN: clang-import-test -dump-ast -x objective-c++ -import %S/Inputs/F.m -expression %s | FileCheck %s + +// CHECK: ObjCAutoreleasePoolStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ReturnStmt + +void expr() { + f(); +} diff --git a/test/Import/objc-param-decl/Inputs/S.m b/test/Import/objc-param-decl/Inputs/S.m new file mode 100644 index 000000000000..6364cfa43381 --- /dev/null +++ b/test/Import/objc-param-decl/Inputs/S.m @@ -0,0 +1,5 @@ +@protocol NSString +@end + +@interface Dictionary <FirstParam : id <NSString>, NSString> +@end diff --git a/test/Import/objc-param-decl/test.m b/test/Import/objc-param-decl/test.m new file mode 100644 index 000000000000..ce05b01b0f83 --- /dev/null +++ b/test/Import/objc-param-decl/test.m @@ -0,0 +1,11 @@ +// RUN: clang-import-test -dump-ast -x objective-c++ -import %S/Inputs/S.m -expression %s | FileCheck %s + +// CHECK: ObjCTypeParamDecl +// CHECK-SAME: FirstParam +// CHECK-SAME: 'id<NSString>' +// CHECK-NEXT: ObjCTypeParamDecl +// CHECK-SAME: 'id':'id' + +void expr() { + Dictionary *d; +} diff --git a/test/Import/objc-try-catch/Inputs/F.m b/test/Import/objc-try-catch/Inputs/F.m new file mode 100644 index 000000000000..5b8b67549b33 --- /dev/null +++ b/test/Import/objc-try-catch/Inputs/F.m @@ -0,0 +1,28 @@ +@interface Exception +@end +@interface OtherException +@end + +void f() { + @try { + Exception *e; + @throw e; + } + @catch (Exception *varname) { + } + @finally { + } + + @try { + } + @catch (Exception *varname1) { + @throw; + } + @catch (OtherException *varname2) { + } + + @try { + } + @finally { + } +} diff --git a/test/Import/objc-try-catch/test.m b/test/Import/objc-try-catch/test.m new file mode 100644 index 000000000000..216beba4f7fa --- /dev/null +++ b/test/Import/objc-try-catch/test.m @@ -0,0 +1,43 @@ +// RUN: clang-import-test -x objective-c++ -Xcc -fobjc-exceptions -dump-ast -import %S/Inputs/F.m -expression %s | FileCheck %s + +// FIXME: Seems that Objective-C try/catch crash codegen on Windows. Reenable once this is fixed. +// UNSUPPORTED: system-windows + +// CHECK: ObjCAtTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: ObjCAtThrowStmt +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-NEXT: ObjCAtCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname +// CHECK-SAME: 'Exception *' +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ObjCAtFinallyStmt +// CHECK-NEXT: CompoundStmt + +// CHECK-NEXT: ObjCAtTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ObjCAtCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname1 +// CHECK-SAME: 'Exception *' +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ObjCAtThrowStmt +// CHECK-NEXT: <<NULL>> +// CHECK-NEXT: ObjCAtCatchStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname2 +// CHECK-SAME: 'OtherException *' +// CHECK-NEXT: CompoundStmt + +// CHECK-NEXT: ObjCAtTryStmt +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: ObjCAtFinallyStmt +// CHECK-NEXT: CompoundStmt + +void expr() { + f(); +} diff --git a/test/Import/pack-expansion-expr/Inputs/F.cpp b/test/Import/pack-expansion-expr/Inputs/F.cpp new file mode 100644 index 000000000000..528451c855d8 --- /dev/null +++ b/test/Import/pack-expansion-expr/Inputs/F.cpp @@ -0,0 +1,11 @@ +template <typename... T> +void sink(T... a); + +template <typename... T> +void packfuncT(T... a) { + sink(a...); +} + +void f() { + packfuncT(1, 2, 3); +} diff --git a/test/Import/pack-expansion-expr/test.cpp b/test/Import/pack-expansion-expr/test.cpp new file mode 100644 index 000000000000..3e9867b1a736 --- /dev/null +++ b/test/Import/pack-expansion-expr/test.cpp @@ -0,0 +1,12 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: PackExpansionExpr +// CHECK-SAME: '<dependent type>' +// CHECK-NEXT: DeclRefExpr +// CHECK-SAME: 'T...' +// CHECK-SAME: ParmVar +// CHECK-SAME: 'a' + +void expr() { + f(); +} diff --git a/test/Import/switch-stmt/Inputs/F.cpp b/test/Import/switch-stmt/Inputs/F.cpp new file mode 100644 index 000000000000..5d0d8376d462 --- /dev/null +++ b/test/Import/switch-stmt/Inputs/F.cpp @@ -0,0 +1,23 @@ +void f() { + switch (1) { + case 1: + case 2: + break; + case 3 ... 4: + case 5 ... 5: + break; + } + switch (int varname; 1) { + case 1: + break; + case 2: + break; + case 3 ... 5: + break; + } + switch (1) + default: + break; + switch (0) + ; +} diff --git a/test/Import/switch-stmt/test.cpp b/test/Import/switch-stmt/test.cpp new file mode 100644 index 000000000000..e274e895c444 --- /dev/null +++ b/test/Import/switch-stmt/test.cpp @@ -0,0 +1,57 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: SwitchStmt +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: BreakStmt +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: BreakStmt + +// CHECK: SwitchStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-SAME: varname +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: CompoundStmt +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: BreakStmt +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: BreakStmt +// CHECK-NEXT: CaseStmt +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: ConstantExpr +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: BreakStmt + +// CHECK: SwitchStmt +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: DefaultStmt +// CHECK-NEXT: BreakStmt + +// CHECK: SwitchStmt +// CHECK-NEXT: IntegerLiteral +// CHECK-NEXT: NullStmt + +void expr() { + f(); +} diff --git a/test/Import/while-stmt/Inputs/F.cpp b/test/Import/while-stmt/Inputs/F.cpp new file mode 100644 index 000000000000..6fd2d8753b04 --- /dev/null +++ b/test/Import/while-stmt/Inputs/F.cpp @@ -0,0 +1,8 @@ +void f() { + while (false) + ; + while (false) { + } + while (bool ini = true) + ; +} diff --git a/test/Import/while-stmt/test.cpp b/test/Import/while-stmt/test.cpp new file mode 100644 index 000000000000..a0309d431240 --- /dev/null +++ b/test/Import/while-stmt/test.cpp @@ -0,0 +1,21 @@ +// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s + +// CHECK: WhileStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: NullStmt + +// CHECK: WhileStmt +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: CompoundStmt + +// CHECK: WhileStmt +// CHECK-NEXT: DeclStmt +// CHECK-NEXT: VarDecl +// CHECK-NEXT: CXXBoolLiteralExpr +// CHECK-NEXT: ImplicitCastExpr +// CHECK-NEXT: DeclRefExpr +// CHECK-NEXT: NullStmt + +void expr() { + f(); +} |