xref: /llvm-project/clang/test/AST/ast-dump-using.cpp (revision 5cb2ebc08f6fa42341409b88466c5c266e5839cc)
1af27466cSSam McCall // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck -strict-whitespace %s
2af27466cSSam McCall 
3af27466cSSam McCall namespace a {
4af27466cSSam McCall struct S;
5*5cb2ebc0Skadir çetinkaya template <typename T> T x = {};
6af27466cSSam McCall }
7af27466cSSam McCall namespace b {
8af27466cSSam McCall using a::S;
9af27466cSSam McCall // CHECK:      UsingDecl {{.*}} a::S
1054091d37SSam McCall // CHECK-NEXT: | `-NestedNameSpecifier Namespace {{.*}} 'a'
11af27466cSSam McCall // CHECK-NEXT: UsingShadowDecl {{.*}} implicit CXXRecord {{.*}} 'S'
12af27466cSSam McCall // CHECK-NEXT: `-RecordType {{.*}} 'a::S'
13af27466cSSam McCall typedef S f; // to dump the introduced type
14af27466cSSam McCall // CHECK:      TypedefDecl
1515f3cd6bSMatheus Izvekov // CHECK-NEXT: `-ElaboratedType {{.*}} 'S' sugar
162e52e13cSWei Wang // CHECK-NEXT:   `-UsingType [[TYPE_ADDR:.*]] 'a::S' sugar
172e52e13cSWei Wang // CHECK-NEXT:     |-UsingShadow [[SHADOW_ADDR:.*]] 'S'
182e52e13cSWei Wang // CHECK-NEXT:     `-RecordType {{.*}} 'a::S'
192e52e13cSWei Wang typedef S e; // check the same UsingType is reused.
202e52e13cSWei Wang // CHECK:      TypedefDecl
212e52e13cSWei Wang // CHECK-NEXT: `-ElaboratedType {{.*}} 'S' sugar
222e52e13cSWei Wang // CHECK-NEXT:   `-UsingType [[TYPE_ADDR]] 'a::S' sugar
232e52e13cSWei Wang // CHECK-NEXT:     |-UsingShadow [[SHADOW_ADDR]] 'S'
24af27466cSSam McCall // CHECK-NEXT:     `-RecordType {{.*}} 'a::S'
25*5cb2ebc0Skadir çetinkaya using a::x;
26*5cb2ebc0Skadir çetinkaya 
foo()27*5cb2ebc0Skadir çetinkaya void foo() {
28*5cb2ebc0Skadir çetinkaya   x<int> = 3;
29*5cb2ebc0Skadir çetinkaya   // CHECK: DeclRefExpr {{.*}} 'x' {{.*}} (UsingShadow {{.*}} 'x')
30*5cb2ebc0Skadir çetinkaya }
31af27466cSSam McCall }
32