Home | History | Annotate | Download | only in Misc
      1 // RUN: %clang_cc1 -std=c++11 -triple x86_64-linux-gnu -fms-extensions -ast-dump -ast-dump-filter Test %s | FileCheck -check-prefix CHECK -strict-whitespace %s
      2 
      3 class testEnumDecl {
      4   enum class TestEnumDeclScoped;
      5   enum TestEnumDeclFixed : int;
      6 };
      7 // CHECK: EnumDecl{{.*}} class TestEnumDeclScoped 'int'
      8 // CHECK: EnumDecl{{.*}} TestEnumDeclFixed 'int'
      9 
     10 class testFieldDecl {
     11   int TestFieldDeclInit = 0;
     12 };
     13 // CHECK:      FieldDecl{{.*}} TestFieldDeclInit 'int'
     14 // CHECK-NEXT:   IntegerLiteral
     15 
     16 namespace testVarDeclNRVO {
     17   class A { };
     18   A foo() {
     19     A TestVarDeclNRVO;
     20     return TestVarDeclNRVO;
     21   }
     22 }
     23 // CHECK: VarDecl{{.*}} TestVarDeclNRVO 'class testVarDeclNRVO::A' nrvo
     24 
     25 void testParmVarDeclInit(int TestParmVarDeclInit = 0);
     26 // CHECK:      ParmVarDecl{{.*}} TestParmVarDeclInit 'int'
     27 // CHECK-NEXT:   IntegerLiteral{{.*}}
     28 
     29 namespace TestNamespaceDecl {
     30   int i;
     31 }
     32 // CHECK:      NamespaceDecl{{.*}} TestNamespaceDecl
     33 // CHECK-NEXT:   VarDecl
     34 
     35 namespace TestNamespaceDecl {
     36   int j;
     37 }
     38 // CHECK:      NamespaceDecl{{.*}} TestNamespaceDecl
     39 // CHECK-NEXT:   original Namespace
     40 // CHECK-NEXT:   VarDecl
     41 
     42 inline namespace TestNamespaceDeclInline {
     43 }
     44 // CHECK:      NamespaceDecl{{.*}} TestNamespaceDeclInline inline
     45 
     46 namespace testUsingDirectiveDecl {
     47   namespace A {
     48   }
     49 }
     50 namespace TestUsingDirectiveDecl {
     51   using namespace testUsingDirectiveDecl::A;
     52 }
     53 // CHECK:      NamespaceDecl{{.*}} TestUsingDirectiveDecl
     54 // CHECK-NEXT:   UsingDirectiveDecl{{.*}} Namespace{{.*}} 'A'
     55 
     56 namespace testNamespaceAlias {
     57   namespace A {
     58   }
     59 }
     60 namespace TestNamespaceAlias = testNamespaceAlias::A;
     61 // CHECK:      NamespaceAliasDecl{{.*}} TestNamespaceAlias
     62 // CHECK-NEXT:   Namespace{{.*}} 'A'
     63 
     64 using TestTypeAliasDecl = int;
     65 // CHECK: TypeAliasDecl{{.*}} TestTypeAliasDecl 'int'
     66 
     67 namespace testTypeAliasTemplateDecl {
     68   template<typename T> class A;
     69   template<typename T> using TestTypeAliasTemplateDecl = A<T>;
     70 }
     71 // CHECK:      TypeAliasTemplateDecl{{.*}} TestTypeAliasTemplateDecl
     72 // CHECK-NEXT:   TemplateTypeParmDecl
     73 // CHECK-NEXT:   TypeAliasDecl{{.*}} TestTypeAliasTemplateDecl 'A<T>'
     74 
     75 namespace testCXXRecordDecl {
     76   class A { };
     77   class B { };
     78   class TestCXXRecordDecl : virtual A, public B {
     79     int i;
     80   };
     81 }
     82 // CHECK:      CXXRecordDecl{{.*}} class TestCXXRecordDecl
     83 // CHECK-NEXT:   virtual private 'class testCXXRecordDecl::A'
     84 // CHECK-NEXT:   public 'class testCXXRecordDecl::B'
     85 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestCXXRecordDecl
     86 // CHECK-NEXT:   FieldDecl
     87 
     88 template<class...T>
     89 class TestCXXRecordDeclPack : public T... {
     90 };
     91 // CHECK:      CXXRecordDecl{{.*}} class TestCXXRecordDeclPack
     92 // CHECK-NEXT:   public 'T'...
     93 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestCXXRecordDeclPack
     94 
     95 thread_local int TestThreadLocalInt;
     96 // CHECK: TestThreadLocalInt {{.*}} tls_dynamic
     97 
     98 __module_private__ class TestCXXRecordDeclPrivate;
     99 // CHECK: CXXRecordDecl{{.*}} class TestCXXRecordDeclPrivate __module_private__
    100 
    101 class testCXXMethodDecl {
    102   __module_private__ void TestCXXMethodDeclPrivate();
    103   virtual void TestCXXMethodDeclPure() = 0;
    104   void TestCXXMethodDeclDelete() = delete;
    105   void TestCXXMethodDeclThrow() throw();
    106   void TestCXXMethodDeclThrowType() throw(int);
    107 };
    108 // CHECK: CXXMethodDecl{{.*}} TestCXXMethodDeclPrivate 'void (void)' __module_private__
    109 // CHECK: CXXMethodDecl{{.*}} TestCXXMethodDeclPure 'void (void)' virtual pure
    110 // CHECK: CXXMethodDecl{{.*}} TestCXXMethodDeclDelete 'void (void)' delete
    111 // CHECK: CXXMethodDecl{{.*}} TestCXXMethodDeclThrow 'void (void) throw()'
    112 // CHECK: CXXMethodDecl{{.*}} TestCXXMethodDeclThrowType 'void (void) throw(int)'
    113 
    114 namespace testCXXConstructorDecl {
    115   class A { };
    116   class TestCXXConstructorDecl : public A {
    117     int I;
    118     TestCXXConstructorDecl(A &a, int i) : A(a), I(i) { }
    119   };
    120 }
    121 // CHECK:      CXXConstructorDecl{{.*}} TestCXXConstructorDecl 'void {{.*}}'
    122 // CHECK-NEXT:   ParmVarDecl{{.*}} a
    123 // CHECK-NEXT:   ParmVarDecl{{.*}} i
    124 // CHECK-NEXT:   CXXCtorInitializer{{.*}}A
    125 // CHECK-NEXT:     Expr
    126 // CHECK:        CXXCtorInitializer{{.*}}I
    127 // CHECK-NEXT:     Expr
    128 // CHECK:        CompoundStmt
    129 
    130 class TestCXXDestructorDecl {
    131   ~TestCXXDestructorDecl() { }
    132 };
    133 // CHECK:      CXXDestructorDecl{{.*}} ~TestCXXDestructorDecl 'void (void) noexcept'
    134 // CHECK-NEXT:   CompoundStmt
    135 
    136 // Test that the range of a defaulted members is computed correctly.
    137 // FIXME: This should include the "= default".
    138 class TestMemberRanges {
    139 public:
    140   TestMemberRanges() = default;
    141   TestMemberRanges(const TestMemberRanges &Other) = default;
    142   TestMemberRanges(TestMemberRanges &&Other) = default;
    143   ~TestMemberRanges() = default;
    144   TestMemberRanges &operator=(const TestMemberRanges &Other) = default;
    145   TestMemberRanges &operator=(TestMemberRanges &&Other) = default;
    146 };
    147 void SomeFunction() {
    148   TestMemberRanges A;
    149   TestMemberRanges B(A);
    150   B = A;
    151   A = static_cast<TestMemberRanges &&>(B);
    152   TestMemberRanges C(static_cast<TestMemberRanges &&>(A));
    153 }
    154 // CHECK:      CXXConstructorDecl{{.*}} <line:{{.*}}:3, col:20>
    155 // CHECK:      CXXConstructorDecl{{.*}} <line:{{.*}}:3, col:49>
    156 // CHECK:      CXXConstructorDecl{{.*}} <line:{{.*}}:3, col:44>
    157 // CHECK:      CXXDestructorDecl{{.*}} <line:{{.*}}:3, col:21>
    158 // CHECK:      CXXMethodDecl{{.*}} <line:{{.*}}:3, col:60>
    159 // CHECK:      CXXMethodDecl{{.*}} <line:{{.*}}:3, col:55>
    160 
    161 class TestCXXConversionDecl {
    162   operator int() { return 0; }
    163 };
    164 // CHECK:      CXXConversionDecl{{.*}} operator int 'int (void)'
    165 // CHECK-NEXT:   CompoundStmt
    166 
    167 namespace TestStaticAssertDecl {
    168   static_assert(true, "msg");
    169 }
    170 // CHECK:      NamespaceDecl{{.*}} TestStaticAssertDecl
    171 // CHECK-NEXT:   StaticAssertDecl{{.*> .*$}}
    172 // CHECK-NEXT:     CXXBoolLiteralExpr
    173 // CHECK-NEXT:     StringLiteral
    174 
    175 namespace testFunctionTemplateDecl {
    176   class A { };
    177   class B { };
    178   class C { };
    179   class D { };
    180   template<typename T> void TestFunctionTemplate(T) { }
    181 
    182   // implicit instantiation
    183   void bar(A a) { TestFunctionTemplate(a); }
    184 
    185   // explicit specialization
    186   template<> void TestFunctionTemplate(B);
    187 
    188   // explicit instantiation declaration
    189   extern template void TestFunctionTemplate(C);
    190 
    191   // explicit instantiation definition
    192   template void TestFunctionTemplate(D);
    193 }
    194 // CHECK:      FunctionTemplateDecl{{.*}} TestFunctionTemplate
    195 // CHECK-NEXT:   TemplateTypeParmDecl
    196 // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate 'void (T)'
    197 // CHECK-NEXT:     ParmVarDecl{{.*}} 'T'
    198 // CHECK-NEXT:     CompoundStmt
    199 // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate {{.*}}A
    200 // CHECK-NEXT:     TemplateArgument
    201 // CHECK-NEXT:     ParmVarDecl
    202 // CHECK-NEXT:     CompoundStmt
    203 // CHECK-NEXT:   Function{{.*}} 'TestFunctionTemplate' {{.*}}B
    204 // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate {{.*}}C
    205 // CHECK-NEXT:     TemplateArgument
    206 // CHECK-NEXT:     ParmVarDecl
    207 // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate {{.*}}D
    208 // CHECK-NEXT:     TemplateArgument
    209 // CHECK-NEXT:     ParmVarDecl
    210 // CHECK-NEXT:     CompoundStmt
    211 // CHECK:      FunctionDecl{{.*}} TestFunctionTemplate {{.*}}B
    212 // CHECK-NEXT:   TemplateArgument
    213 // CHECK-NEXT:   ParmVarDecl
    214 
    215 namespace testClassTemplateDecl {
    216   class A { };
    217   class B { };
    218   class C { };
    219   class D { };
    220 
    221   template<typename T> class TestClassTemplate {
    222     int i;
    223   };
    224 
    225   // implicit instantiation
    226   TestClassTemplate<A> a;
    227 
    228   // explicit specialization
    229   template<> class TestClassTemplate<B> {
    230     int j;
    231   };
    232 
    233   // explicit instantiation declaration
    234   extern template class TestClassTemplate<C>;
    235 
    236   // explicit instantiation definition
    237   template class TestClassTemplate<D>;
    238 
    239   // partial explicit specialization
    240   template<typename T1, typename T2> class TestClassTemplatePartial {
    241     int i;
    242   };
    243   template<typename T1> class TestClassTemplatePartial<T1, A> {
    244     int j;
    245   };
    246 }
    247 // CHECK:      ClassTemplateDecl{{.*}} TestClassTemplate
    248 // CHECK-NEXT:   TemplateTypeParmDecl
    249 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestClassTemplate
    250 // CHECK-NEXT:     CXXRecordDecl{{.*}} class TestClassTemplate
    251 // CHECK-NEXT:     FieldDecl{{.*}} i
    252 // CHECK-NEXT:   ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
    253 // CHECK-NEXT:     TemplateArgument{{.*}}A
    254 // CHECK-NEXT:     CXXRecordDecl{{.*}} class TestClassTemplate
    255 // CHECK-NEXT:     FieldDecl{{.*}} i
    256 // CHECK:        ClassTemplateSpecialization{{.*}} 'TestClassTemplate'
    257 // CHECK-NEXT:   ClassTemplateSpecialization{{.*}} 'TestClassTemplate'
    258 // CHECK-NEXT:   ClassTemplateSpecialization{{.*}} 'TestClassTemplate'
    259 
    260 // CHECK:      ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
    261 // CHECK-NEXT:   TemplateArgument{{.*}}B
    262 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestClassTemplate
    263 // CHECK-NEXT:   FieldDecl{{.*}} j
    264 
    265 // CHECK:      ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
    266 // CHECK-NEXT:   TemplateArgument{{.*}}C
    267 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestClassTemplate
    268 // CHECK-NEXT:   FieldDecl{{.*}} i
    269 
    270 // CHECK:      ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
    271 // CHECK-NEXT:   TemplateArgument{{.*}}D
    272 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestClassTemplate
    273 // CHECK-NEXT:   FieldDecl{{.*}} i
    274 
    275 // CHECK:      ClassTemplatePartialSpecializationDecl{{.*}} class TestClassTemplatePartial
    276 // CHECK-NEXT:   TemplateArgument
    277 // CHECK-NEXT:   TemplateArgument{{.*}}A
    278 // CHECK-NEXT:   TemplateTypeParmDecl
    279 // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestClassTemplatePartial
    280 // CHECK-NEXT:   FieldDecl{{.*}} j
    281 
    282 // PR15220 dump instantiation only once
    283 namespace testCanonicalTemplate {
    284   class A {};
    285 
    286   template<typename T> void TestFunctionTemplate(T);
    287   template<typename T> void TestFunctionTemplate(T);
    288   void bar(A a) { TestFunctionTemplate(a); }
    289   // CHECK:      FunctionTemplateDecl{{.*}} TestFunctionTemplate
    290   // CHECK-NEXT:   TemplateTypeParmDecl
    291   // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate 'void (T)'
    292   // CHECK-NEXT:     ParmVarDecl{{.*}} 'T'
    293   // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate {{.*}}A
    294   // CHECK-NEXT:     TemplateArgument
    295   // CHECK-NEXT:     ParmVarDecl
    296   // CHECK:      FunctionTemplateDecl{{.*}} TestFunctionTemplate
    297   // CHECK-NEXT:   TemplateTypeParmDecl
    298   // CHECK-NEXT:   FunctionDecl{{.*}} TestFunctionTemplate 'void (T)'
    299   // CHECK-NEXT:     ParmVarDecl{{.*}} 'T'
    300   // CHECK-NEXT:   Function{{.*}} 'TestFunctionTemplate'
    301   // CHECK-NOT:      TemplateArgument
    302 
    303   template<typename T1> class TestClassTemplate {
    304     template<typename T2> friend class TestClassTemplate;
    305   };
    306   TestClassTemplate<A> a;
    307   // CHECK:      ClassTemplateDecl{{.*}} TestClassTemplate
    308   // CHECK-NEXT:   TemplateTypeParmDecl
    309   // CHECK-NEXT:   CXXRecordDecl{{.*}} class TestClassTemplate
    310   // CHECK-NEXT:     CXXRecordDecl{{.*}} class TestClassTemplate
    311   // CHECK-NEXT:     FriendDecl
    312   // CHECK-NEXT:       ClassTemplateDecl{{.*}} TestClassTemplate
    313   // CHECK-NEXT:         TemplateTypeParmDecl
    314   // CHECK-NEXT:         CXXRecordDecl{{.*}} class TestClassTemplate
    315   // CHECK-NEXT:         ClassTemplateSpecialization{{.*}} 'TestClassTemplate'
    316   // CHECK-NEXT:   ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate
    317   // CHECK-NEXT:     TemplateArgument{{.*}}A
    318   // CHECK-NEXT:     CXXRecordDecl{{.*}} class TestClassTemplate
    319 }
    320 
    321 template <class T>
    322 class TestClassScopeFunctionSpecialization {
    323   template<class U> void foo(U a) { }
    324   template<> void foo<int>(int a) { }
    325 };
    326 // CHECK:      ClassScopeFunctionSpecializationDecl
    327 // CHECK-NEXT:   CXXMethod{{.*}} 'foo' 'void (int)'
    328 // CHECK-NEXT:   TemplateArgument{{.*}} 'int'
    329 
    330 namespace TestTemplateTypeParmDecl {
    331   template<typename ... T, class U = int> void foo();
    332 }
    333 // CHECK:      NamespaceDecl{{.*}} TestTemplateTypeParmDecl
    334 // CHECK-NEXT:   FunctionTemplateDecl
    335 // CHECK-NEXT:     TemplateTypeParmDecl{{.*}} typename ... T
    336 // CHECK-NEXT:     TemplateTypeParmDecl{{.*}} class U
    337 // CHECK-NEXT:       TemplateArgument type 'int'
    338 
    339 namespace TestNonTypeTemplateParmDecl {
    340   template<int I = 1, int ... J> void foo();
    341 }
    342 // CHECK:      NamespaceDecl{{.*}} TestNonTypeTemplateParmDecl
    343 // CHECK-NEXT:   FunctionTemplateDecl
    344 // CHECK-NEXT:     NonTypeTemplateParmDecl{{.*}} 'int' I
    345 // CHECK-NEXT:       TemplateArgument expr
    346 // CHECK-NEXT:         IntegerLiteral{{.*}} 'int' 1
    347 // CHECK-NEXT:     NonTypeTemplateParmDecl{{.*}} 'int' ... J
    348 
    349 namespace TestTemplateTemplateParmDecl {
    350   template<typename T> class A;
    351   template <template <typename> class T = A, template <typename> class ... U> void foo();
    352 }
    353 // CHECK:      NamespaceDecl{{.*}} TestTemplateTemplateParmDecl
    354 // CHECK:        FunctionTemplateDecl
    355 // CHECK-NEXT:     TemplateTemplateParmDecl{{.*}} T
    356 // CHECK-NEXT:       TemplateTypeParmDecl{{.*}} typename
    357 // CHECK-NEXT:       TemplateArgument{{.*}} template A
    358 // CHECK-NEXT:     TemplateTemplateParmDecl{{.*}} ... U
    359 // CHECK-NEXT:       TemplateTypeParmDecl{{.*}} typename
    360 
    361 namespace TestTemplateArgument {
    362   template<typename> class A { };
    363   template<template<typename> class ...> class B { };
    364   int foo();
    365 
    366   template<typename> class testType { };
    367   template class testType<int>;
    368   // CHECK:      ClassTemplateSpecializationDecl{{.*}} class testType
    369   // CHECK-NEXT:   TemplateArgument{{.*}} type 'int'
    370 
    371   template<int fp(void)> class testDecl { };
    372   template class testDecl<foo>;
    373   // CHECK:      ClassTemplateSpecializationDecl{{.*}} class testDecl
    374   // CHECK-NEXT:   TemplateArgument{{.*}} decl
    375   // CHECK-NEXT:     Function{{.*}}foo
    376 
    377   template class testDecl<nullptr>;
    378   // CHECK:      ClassTemplateSpecializationDecl{{.*}} class testDecl
    379   // CHECK-NEXT:   TemplateArgument{{.*}} nullptr
    380 
    381   template<int> class testIntegral { };
    382   template class testIntegral<1>;
    383   // CHECK:      ClassTemplateSpecializationDecl{{.*}} class testIntegral
    384   // CHECK-NEXT:   TemplateArgument{{.*}} integral 1
    385 
    386   template<template<typename> class> class testTemplate { };
    387   template class testTemplate<A>;
    388   // CHECK:      ClassTemplateSpecializationDecl{{.*}} class testTemplate
    389   // CHECK-NEXT:   TemplateArgument{{.*}} A
    390 
    391   template<template<typename> class ...T> class C {
    392     B<T...> testTemplateExpansion;
    393   };
    394   // FIXME: Need TemplateSpecializationType dumping to test TemplateExpansion.
    395 
    396   template<int, int = 0> class testExpr;
    397   template<int I> class testExpr<I> { };
    398   // CHECK:      ClassTemplatePartialSpecializationDecl{{.*}} class testExpr
    399   // CHECK-NEXT:   TemplateArgument{{.*}} expr
    400   // CHECK-NEXT:     DeclRefExpr{{.*}}I
    401 
    402   template<int, int ...> class testPack { };
    403   template class testPack<0, 1, 2>;
    404   // CHECK:      ClassTemplateSpecializationDecl{{.*}} class testPack
    405   // CHECK-NEXT:   TemplateArgument{{.*}} integral 0
    406   // CHECK-NEXT:   TemplateArgument{{.*}} pack
    407   // CHECK-NEXT:     TemplateArgument{{.*}} integral 1
    408   // CHECK-NEXT:     TemplateArgument{{.*}} integral 2
    409 }
    410 
    411 namespace testUsingDecl {
    412   int i;
    413 }
    414 namespace TestUsingDecl {
    415   using testUsingDecl::i;
    416 }
    417 // CHECK:      NamespaceDecl{{.*}} TestUsingDecl
    418 // CHECK-NEXT:   UsingDecl{{.*}} testUsingDecl::i
    419 // CHECK-NEXT:   UsingShadowDecl{{.*}} Var{{.*}} 'i' 'int'
    420 
    421 namespace testUnresolvedUsing {
    422   class A { };
    423   template<class T> class B {
    424   public:
    425     A a;
    426   };
    427   template<class T> class TestUnresolvedUsing : public B<T> {
    428     using typename B<T>::a;
    429     using B<T>::a;
    430   };
    431 }
    432 // CHECK: CXXRecordDecl{{.*}} TestUnresolvedUsing
    433 // CHECK:   UnresolvedUsingTypenameDecl{{.*}} B<T>::a
    434 // CHECK:   UnresolvedUsingValueDecl{{.*}} B<T>::a
    435 
    436 namespace TestLinkageSpecDecl {
    437   extern "C" void test1();
    438   extern "C++" void test2();
    439 }
    440 // CHECK:      NamespaceDecl{{.*}} TestLinkageSpecDecl
    441 // CHECK-NEXT:   LinkageSpecDecl{{.*}} C
    442 // CHECK-NEXT:     FunctionDecl
    443 // CHECK-NEXT:   LinkageSpecDecl{{.*}} C++
    444 // CHECK-NEXT:     FunctionDecl
    445 
    446 class TestAccessSpecDecl {
    447 public:
    448 private:
    449 protected:
    450 };
    451 // CHECK:      CXXRecordDecl{{.*}} class TestAccessSpecDecl
    452 // CHECK-NEXT:    CXXRecordDecl{{.*}} class TestAccessSpecDecl
    453 // CHECK-NEXT:    AccessSpecDecl{{.*}} public
    454 // CHECK-NEXT:    AccessSpecDecl{{.*}} private
    455 // CHECK-NEXT:    AccessSpecDecl{{.*}} protected
    456 
    457 template<typename T> class TestFriendDecl {
    458   friend int foo();
    459   friend class A;
    460   friend T;
    461 };
    462 // CHECK:      CXXRecord{{.*}} TestFriendDecl
    463 // CHECK-NEXT:   CXXRecord{{.*}} TestFriendDecl
    464 // CHECK-NEXT:   FriendDecl
    465 // CHECK-NEXT:     FunctionDecl{{.*}} foo
    466 // CHECK-NEXT:   FriendDecl{{.*}} 'class A':'class A'
    467 // CHECK-NEXT:   FriendDecl{{.*}} 'T'
    468 
    469 namespace TestFileScopeAsmDecl {
    470   asm("ret");
    471 }
    472 // CHECK:      NamespaceDecl{{.*}} TestFileScopeAsmDecl{{$}}
    473 // CHECK:        FileScopeAsmDecl{{.*> .*$}}
    474 // CHECK-NEXT:     StringLiteral
    475 
    476 namespace TestFriendDecl2 {
    477   void f();
    478   struct S {
    479     friend void f();
    480   };
    481 }
    482 // CHECK: NamespaceDecl [[TestFriendDecl2:0x.*]] <{{.*}}> {{.*}} TestFriendDecl2
    483 // CHECK: |-FunctionDecl [[TestFriendDecl2_f:0x.*]] <{{.*}}> {{.*}} f 'void (void)'
    484 // CHECK: `-CXXRecordDecl {{.*}} struct S
    485 // CHECK:   |-CXXRecordDecl {{.*}} struct S
    486 // CHECK:   `-FriendDecl
    487 // CHECK:     `-FunctionDecl {{.*}} parent [[TestFriendDecl2]] prev [[TestFriendDecl2_f]] <{{.*}}> {{.*}} f 'void (void)'
    488 
    489 namespace Comment {
    490   extern int Test;
    491   /// Something here.
    492   extern int Test;
    493   extern int Test;
    494 }
    495 
    496 // CHECK: VarDecl {{.*}} Test 'int' extern
    497 // CHECK-NOT: FullComment
    498 // CHECK: VarDecl {{.*}} Test 'int' extern
    499 // CHECK: `-FullComment
    500 // CHECK:   `-ParagraphComment
    501 // CHECK:       `-TextComment
    502 // CHECK: VarDecl {{.*}} Test 'int' extern
    503 // CHECK-NOT: FullComment
    504