12125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// Note: the run lines follow their respective tests, since line/column numbers 22125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// matter in this test. 32125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 42125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko/// This is T1. 52125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkotemplate<typename T> 62125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkovoid T1(T t) { } 72125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 82125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko/// This is T2. 92125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkotemplate<typename T> 102125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkovoid T2(T t) { } 112125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 122125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko/// This is T2<int>. 132125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkotemplate<> 142125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkovoid T2(int t) { } 152125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 162125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkovoid test_CC1() { 172125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 182125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko} 192125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 202125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// Check that implicit instantiations of class templates and members pick up 212125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// comments from class templates and specializations. 222125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 232125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko/// This is T3. 242125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkotemplate<typename T> 252125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkoclass T3 { 262125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkopublic: 272125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T4. 282125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko static void T4(); 292125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 302125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T5. 312125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko static int T5; 322125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 332125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T6. 342125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko void T6(); 352125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 362125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T7. 372125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko int T7; 382125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 392125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T8. 402125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko class T8 {}; 412125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 422125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T9. 432125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko enum T9 { 442125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T10. 452125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T10 462125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko }; 472125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 482125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T11. 492125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko template<typename U> 502125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko void T11(U t) {} 512125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 522125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko typedef T3<double> T12; 532125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko}; 542125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 552125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkovoid test_CC2_CC3_CC4() { 562125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T3<int>::T4(); 572125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T3<int> t3; 582125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko t3.T6(); 592125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T3<int>::T8 t8; 602125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko} 612125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 622125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko/// This is T100. 632125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkotemplate<typename T, typename U> 642125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkoclass T100 { 652125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko}; 662125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 672125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko/// This is T100<int, T>. 682125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkotemplate<typename T> 692125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkoclass T100<int, T> { 702125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkopublic: 712125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T101. 722125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko static void T101(); 732125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 742125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T102. 752125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko static int T102; 762125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 772125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T103. 782125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko void T103(); 792125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 802125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T104. 812125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko int T104; 822125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 832125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T105. 842125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko class T105 {}; 852125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 862125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T106. 872125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko enum T106 { 882125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T107. 892125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T107 902125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko }; 912125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 922125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko /// This is T108. 932125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko template<typename U> 942125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko void T108(U t) {} 952125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 962125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko typedef T100<double, T> T109; 972125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 982125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko typedef T100<double, double> T110; 992125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko}; 1002125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 1012125c9010e259548a8c476fa998a561889555c95Dmitri Gribenkovoid test_CC5_CC6_CC7() { 1022125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T100<int, long>::T101(); 1032125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T100<int, long> t100; 1042125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko t100.T103(); 1052125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko T100<int, long>::T105 t105; 1062125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko} 1072125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 108931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:17:1 %s | FileCheck -check-prefix=CHECK-CC1 %s 1092125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText T1}{{.*}}(brief comment: This is T1.) 1102125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText T2}{{.*}}(brief comment: This is T2.) 1112125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 112931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:56:12 %s | FileCheck -check-prefix=CHECK-CC2 %s 1132125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC2: CXXMethod:{ResultType void}{TypedText T4}{{.*}}(brief comment: This is T4.) 1142125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC2: VarDecl:{ResultType int}{TypedText T5}{{.*}}(brief comment: This is T5.) 1152125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 116931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:58:6 %s | FileCheck -check-prefix=CHECK-CC3 %s 1172125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC3: FunctionTemplate:{ResultType void}{TypedText T11}{{.*}}(brief comment: This is T11.) 1182125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC3: CXXMethod:{ResultType void}{TypedText T6}{{.*}}(brief comment: This is T6.) 1192125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC3: FieldDecl:{ResultType int}{TypedText T7}{{.*}}(brief comment: This is T7.) 1202125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 121931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:59:12 %s | FileCheck -check-prefix=CHECK-CC4 %s 1222125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC4: EnumConstantDecl:{ResultType T3<int>::T9}{TypedText T10}{{.*}}(brief comment: This is T10.) 1232125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// FIXME: after we implement propagating comments through typedefs, this 1242125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// typedef for implicit instantiation should pick up the documentation 1252125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// comment from class template. 1262125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC4: TypedefDecl:{TypedText T12} 1272125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC4-SHOULD-BE: TypedefDecl:{TypedText T12}{{.*}}(brief comment: This is T3.) 1282125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC4: ClassDecl:{TypedText T8}{{.*}}(brief comment: This is T8.) 1292125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC4: EnumDecl:{TypedText T9}{{.*}}(brief comment: This is T9.) 1302125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 131931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:102:20 %s | FileCheck -check-prefix=CHECK-CC5 %s 1322125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC5: CXXMethod:{ResultType void}{TypedText T101}{{.*}}(brief comment: This is T101.) 1332125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC5: VarDecl:{ResultType int}{TypedText T102}{{.*}}(brief comment: This is T102.) 1342125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 135931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:104:8 %s | FileCheck -check-prefix=CHECK-CC6 %s 1362125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC6: CXXMethod:{ResultType void}{TypedText T103}{{.*}}(brief comment: This is T103.) 1372125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC6: FieldDecl:{ResultType int}{TypedText T104}{{.*}}(brief comment: This is T104.) 1382125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC6: FunctionTemplate:{ResultType void}{TypedText T108}{{.*}}(brief comment: This is T108.) 1392125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 140931a4feb64f18190d189c222d61b2abf52f18ab8Tim Northover// RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:105:20 %s | FileCheck -check-prefix=CHECK-CC7 %s 1412125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7: ClassDecl:{TypedText T105}{{.*}}(brief comment: This is T105.) 1422125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7: EnumDecl:{TypedText T106}{{.*}}(brief comment: This is T106.) 1432125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7: EnumConstantDecl:{ResultType T100<int, long>::T106}{TypedText T107}{{.*}}(brief comment: This is T107.) 1442125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// FIXME: after we implement propagating comments through typedefs, these two 1452125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// typedefs for implicit instantiations should pick up the documentation 1462125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// comment from class template. 1472125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7: TypedefDecl:{TypedText T109} 1482125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7: TypedefDecl:{TypedText T110} 1492125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7-SHOULD-BE: TypedefDecl:{TypedText T109}{{.*}}(brief comment: This is T100.) 1502125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko// CHECK-CC7-SHOULD-BE: TypedefDecl:{TypedText T110}{{.*}}(brief comment: This is T100.) 1512125c9010e259548a8c476fa998a561889555c95Dmitri Gribenko 152