From 70fd0f5a412747400c6bf4f774396cd9f642562b Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Fri, 7 Dec 2018 14:57:07 +0000 Subject: [PATCH] Adding tests for -ast-dump; NFC. This adds tests for various statements in C++ that are not covered by C. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@348596 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/AST/ast-dump-stmt.cpp | 176 ++++++++++++++++++++++++++++++++++++- 1 file changed, 174 insertions(+), 2 deletions(-) diff --git a/test/AST/ast-dump-stmt.cpp b/test/AST/ast-dump-stmt.cpp index 8497a609dc..3028beec1d 100644 --- a/test/AST/ast-dump-stmt.cpp +++ b/test/AST/ast-dump-stmt.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fcxx-exceptions -ast-dump -ast-dump-filter Test %s | FileCheck -strict-whitespace %s +// RUN: %clang_cc1 -std=c++2a -fcxx-exceptions -ast-dump %s | FileCheck -strict-whitespace %s namespace n { void function() {} @@ -77,7 +77,6 @@ void TestDependentScopeMemberExpr() { obj.member = T(); (&obj)->member = T(); } - // CHECK: FunctionTemplateDecl {{.*}} TestDependentScopeMemberExpr // CHECK: CXXDependentScopeMemberExpr {{.*}} lvalue .member // CHECK: CXXDependentScopeMemberExpr {{.*}} lvalue ->member @@ -96,6 +95,179 @@ void TestUnionInitList() // Check-NEXT: | `-InitListExpr {{.+}} 'U' field Field {{.+}} 'i' 'int' // Check-NEXT: |-InitListExpr {{.+}} 'U' field Field {{.+}} 'i' 'int' // Check-NEXT: | `-IntegerLiteral {{.+}} 'int' 1 +} + +void TestSwitch(int i) { + switch (int a; i) + ; + // CHECK: SwitchStmt 0x{{[^ ]*}} has_init + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:15 a 'int' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int' + // CHECK-NEXT: NullStmt +} + +void TestIf(bool b) { + if (int i = 12; b) + ; + // CHECK: IfStmt 0x{{[^ ]*}} has_init + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:11 i 'int' cinit + // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} 'int' 12 + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'bool' lvalue ParmVar 0x{{[^ ]*}} 'b' 'bool' + // CHECK-NEXT: NullStmt + + if constexpr (sizeof(b) == 1) + ; + // CHECK: IfStmt 0x{{[^ ]*}} + // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} 'bool' + // CHECK-NEXT: BinaryOperator + // CHECK-NEXT: UnaryExprOrTypeTraitExpr + // CHECK-NEXT: ParenExpr + // CHECK-NEXT: DeclRefExpr + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: IntegerLiteral + // CHECK-NEXT: NullStmt + + if constexpr (sizeof(b) == 1) + ; + else + ; + // CHECK: IfStmt 0x{{[^ ]*}} has_else + // CHECK-NEXT: ConstantExpr 0x{{[^ ]*}} 'bool' + // CHECK-NEXT: BinaryOperator + // CHECK-NEXT: UnaryExprOrTypeTraitExpr + // CHECK-NEXT: ParenExpr + // CHECK-NEXT: DeclRefExpr + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: IntegerLiteral + // CHECK-NEXT: NullStmt + // CHECK-NEXT: NullStmt +} + +struct Container { + int *begin() const; + int *end() const; +}; + +void TestIteration() { + for (int i = 0; int j = i; ++i) + ; + // CHECK: ForStmt 0x{{[^ ]*}} + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:12 used i 'int' cinit + // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} 'int' 0 + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:23 used j 'int' cinit + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int' lvalue Var 0x{{[^ ]*}} 'i' 'int' + // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}} 'bool' + // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}} 'int' + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int' lvalue Var 0x{{[^ ]*}} 'j' 'int' + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int' lvalue prefix '++' + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int' lvalue Var 0x{{[^ ]*}} 'i' 'int' + // CHECK-NEXT: NullStmt + + int vals[10]; + for (int v : vals) + ; + // CHECK: CXXForRangeStmt 0x{{[^ ]*}} + // CHECK-NEXT: <<>> + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:16 implicit used __range1 'int (&)[10]' cinit + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int [10]' lvalue Var 0x{{[^ ]*}} 'vals' 'int [10]' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:14 implicit used __begin1 'int *':'int *' cinit + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int [10]' lvalue Var 0x{{[^ ]*}} '__range1' 'int (&)[10]' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:14 implicit used __end1 'int *':'int *' cinit + // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} 'int *' '+' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int [10]' lvalue Var 0x{{[^ ]*}} '__range1' 'int (&)[10]' + // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} 'long long' 10 + // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} 'bool' '!=' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__end1' 'int *':'int *' + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int *':'int *' lvalue prefix '++' + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:12 v 'int' cinit + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int' lvalue prefix '*' cannot overflow + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: NullStmt + Container C; + for (int v : C) + ; + // CHECK: CXXForRangeStmt 0x{{[^ ]*}} + // CHECK-NEXT: <<>> + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:16 implicit used __range1 'Container &' cinit + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'Container' lvalue Var 0x{{[^ ]*}} 'C' 'Container' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:14 implicit used __begin1 'int *':'int *' cinit + // CHECK-NEXT: CXXMemberCallExpr 0x{{[^ ]*}} 'int *' + // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} '' .begin 0x{{[^ ]*}} + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'Container' lvalue Var 0x{{[^ ]*}} '__range1' 'Container &' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:14 implicit used __end1 'int *':'int *' cinit + // CHECK-NEXT: CXXMemberCallExpr 0x{{[^ ]*}} 'int *' + // CHECK-NEXT: MemberExpr 0x{{[^ ]*}} '' .end 0x{{[^ ]*}} + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'Container' lvalue Var 0x{{[^ ]*}} '__range1' 'Container &' + // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} 'bool' '!=' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__end1' 'int *':'int *' + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int *':'int *' lvalue prefix '++' + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:12 v 'int' cinit + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int' lvalue prefix '*' cannot overflow + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: NullStmt + for (int a; int v : vals) + ; + // CHECK: CXXForRangeStmt 0x{{[^ ]*}} + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:12 a 'int' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:23 implicit used __range1 'int (&)[10]' cinit + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int [10]' lvalue Var 0x{{[^ ]*}} 'vals' 'int [10]' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:21 implicit used __begin1 'int *':'int *' cinit + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int [10]' lvalue Var 0x{{[^ ]*}} '__range1' 'int (&)[10]' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:21 implicit used __end1 'int *':'int *' cinit + // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} 'int *' '+' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int [10]' lvalue Var 0x{{[^ ]*}} '__range1' 'int (&)[10]' + // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} 'long long' 10 + // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} 'bool' '!=' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__end1' 'int *':'int *' + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int *':'int *' lvalue prefix '++' + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl 0x{{[^ ]*}} col:19 v 'int' cinit + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} 'int' lvalue prefix '*' cannot overflow + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} 'int *':'int *' lvalue Var 0x{{[^ ]*}} '__begin1' 'int *':'int *' + // CHECK-NEXT: NullStmt } -- 2.40.0