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