xref: /aosp_15_r20/external/clang/test/Tooling/clang-check-ast-dump.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: clang-check -ast-dump "%s" -- 2>&1 | FileCheck %s
2*67e74705SXin Li // CHECK: NamespaceDecl{{.*}}test_namespace
3*67e74705SXin Li // CHECK-NEXT: CXXRecordDecl{{.*}}TheClass
4*67e74705SXin Li // CHECK: CXXMethodDecl{{.*}}theMethod
5*67e74705SXin Li // CHECK-NEXT: ParmVarDecl{{.*}}x
6*67e74705SXin Li // CHECK-NEXT: CompoundStmt
7*67e74705SXin Li // CHECK-NEXT:   ReturnStmt
8*67e74705SXin Li // CHECK-NEXT:     BinaryOperator
9*67e74705SXin Li //
10*67e74705SXin Li // RUN: clang-check -ast-dump -ast-dump-filter test_namespace::TheClass::theMethod "%s" -- 2>&1 | FileCheck -check-prefix CHECK-FILTER %s
11*67e74705SXin Li // CHECK-FILTER-NOT: NamespaceDecl
12*67e74705SXin Li // CHECK-FILTER-NOT: CXXRecordDecl
13*67e74705SXin Li // CHECK-FILTER: {{^}}Dumping test_namespace::TheClass::theMethod
14*67e74705SXin Li // CHECK-FILTER-NEXT: {{^}}CXXMethodDecl{{.*}}theMethod
15*67e74705SXin Li // CHECK-FILTER-NEXT: ParmVarDecl{{.*}}x
16*67e74705SXin Li // CHECK-FILTER-NEXT: CompoundStmt
17*67e74705SXin Li // CHECK-FILTER-NEXT:   ReturnStmt
18*67e74705SXin Li // CHECK-FILTER-NEXT:     BinaryOperator
19*67e74705SXin Li //
20*67e74705SXin Li // RUN: clang-check -ast-print "%s" -- 2>&1 | FileCheck -check-prefix CHECK-PRINT %s
21*67e74705SXin Li // CHECK-PRINT: namespace test_namespace
22*67e74705SXin Li // CHECK-PRINT: class TheClass
23*67e74705SXin Li // CHECK-PRINT: int theMethod(int x)
24*67e74705SXin Li //
25*67e74705SXin Li // RUN: clang-check -ast-list "%s" -- 2>&1 | FileCheck -check-prefix CHECK-LIST %s
26*67e74705SXin Li // CHECK-LIST: test_namespace
27*67e74705SXin Li // CHECK-LIST-NEXT: test_namespace::TheClass
28*67e74705SXin Li // CHECK-LIST-NEXT: test_namespace::TheClass::theMethod
29*67e74705SXin Li // CHECK-LIST-NEXT: x
30*67e74705SXin Li //
31*67e74705SXin Li // RUN: clang-check -ast-dump -ast-dump-filter test_namespace::TheClass::n "%s" -- 2>&1 | FileCheck -check-prefix CHECK-ATTR %s
32*67e74705SXin Li // CHECK-ATTR: test_namespace
33*67e74705SXin Li // CHECK-ATTR-NEXT: FieldDecl{{.*}}n
34*67e74705SXin Li // CHECK-ATTR-NEXT:   AlignedAttr
35*67e74705SXin Li // CHECK-ATTR-NEXT:     BinaryOperator
36*67e74705SXin Li //
37*67e74705SXin Li // RUN: clang-check -ast-dump -ast-dump-filter test_namespace::AfterNullNode "%s" -- 2>&1 | FileCheck -check-prefix CHECK-AFTER-NULL %s
38*67e74705SXin Li // CHECK-AFTER-NULL: class AfterNullNode
39*67e74705SXin Li 
40*67e74705SXin Li namespace test_namespace {
41*67e74705SXin Li 
42*67e74705SXin Li class TheClass {
43*67e74705SXin Li public:
theMethod(int x)44*67e74705SXin Li   int theMethod(int x) {
45*67e74705SXin Li     return x + x;
46*67e74705SXin Li   }
47*67e74705SXin Li   int n __attribute__((aligned(1+1)));
48*67e74705SXin Li };
49*67e74705SXin Li 
50*67e74705SXin Li // Used to fail with -ast-dump-filter X
51*67e74705SXin Li template<template<typename T> class C> class Z {};
52*67e74705SXin Li 
53*67e74705SXin Li // Check that traversal continues after the previous construct.
54*67e74705SXin Li class AfterNullNode {};
55*67e74705SXin Li 
56*67e74705SXin Li }
57