1*67e74705SXin Li // RUN: rm -rf %t 2*67e74705SXin Li // RUN: mkdir %t 3*67e74705SXin Li // RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng -target x86_64-apple-darwin10 std=c++11 %s > %t/out 4*67e74705SXin Li // RUN: FileCheck %s < %t/out 5*67e74705SXin Li 6*67e74705SXin Li // Ensure that XML we generate is not invalid. 7*67e74705SXin Li // RUN: FileCheck %s -check-prefix=WRONG < %t/out 8*67e74705SXin Li // WRONG-NOT: CommentXMLInvalid 9*67e74705SXin Li // rdar://12378714 10*67e74705SXin Li 11*67e74705SXin Li /** 12*67e74705SXin Li * \brief Aaa 13*67e74705SXin Li */ 14*67e74705SXin Li template<typename T> struct A { 15*67e74705SXin Li /** 16*67e74705SXin Li * \brief Bbb 17*67e74705SXin Li */ 18*67e74705SXin Li A(); 19*67e74705SXin Li /** 20*67e74705SXin Li * \brief Ccc 21*67e74705SXin Li */ 22*67e74705SXin Li ~A(); 23*67e74705SXin Li /** 24*67e74705SXin Li * \brief Ddd 25*67e74705SXin Li */ fA26*67e74705SXin Li void f() { } 27*67e74705SXin Li }; 28*67e74705SXin Li // CHECK: <Declaration>template <typename T> struct A {}</Declaration> 29*67e74705SXin Li // CHECK: <Declaration>A<T>()</Declaration> 30*67e74705SXin Li // CHECK: <Declaration>~A<T>()</Declaration> 31*67e74705SXin Li 32*67e74705SXin Li /** 33*67e74705SXin Li * \Brief Eee 34*67e74705SXin Li */ 35*67e74705SXin Li template <typename T> struct D : A<T> { 36*67e74705SXin Li /** 37*67e74705SXin Li * \brief 38*67e74705SXin Li */ 39*67e74705SXin Li using A<T>::f; 40*67e74705SXin Li 41*67e74705SXin Li void f(); 42*67e74705SXin Li }; 43*67e74705SXin Li // CHECK: <Declaration>template <typename T> struct D : A<T> {}</Declaration> 44*67e74705SXin Li // CHECK: <Declaration>using A<T>::f</Declaration> 45*67e74705SXin Li 46*67e74705SXin Li struct Base { 47*67e74705SXin Li int foo; 48*67e74705SXin Li }; 49*67e74705SXin Li /** 50*67e74705SXin Li * \brief 51*67e74705SXin Li */ 52*67e74705SXin Li template<typename T> struct E : Base { 53*67e74705SXin Li /** 54*67e74705SXin Li * \brief 55*67e74705SXin Li */ 56*67e74705SXin Li using Base::foo; 57*67e74705SXin Li }; 58*67e74705SXin Li // CHECK: <Declaration>template <typename T> struct E : Base {}</Declaration> 59*67e74705SXin Li // CHECK: <Declaration>using Base::foo</Declaration> 60*67e74705SXin Li 61*67e74705SXin Li /// \tparam 62*67e74705SXin Li /// \param AAA Blah blah 63*67e74705SXin Li template<typename T> 64*67e74705SXin Li void func_template_1(T AAA); 65*67e74705SXin Li // CHECK: <Declaration>template <typename T> void func_template_1(T AAA)</Declaration> 66*67e74705SXin Li 67*67e74705SXin Li template<template<template<typename CCC> class DDD, class BBB> class AAA> 68*67e74705SXin Li void func_template_2(); 69*67e74705SXin Li // FIXME: There is not Declaration field in the generated output. 70*67e74705SXin Li 71*67e74705SXin Li namespace rdar16128173 { 72*67e74705SXin Li // CHECK: <Declaration>template <class PtrTy> class OpaquePtr {}</Declaration> 73*67e74705SXin Li 74*67e74705SXin Li /// \brief Wrapper for void* pointer. 75*67e74705SXin Li /// \tparam PtrTy Either a pointer type like 'T*' or a type that behaves like 76*67e74705SXin Li /// a pointer. 77*67e74705SXin Li template <class PtrTy> 78*67e74705SXin Li class OpaquePtr {}; 79*67e74705SXin Li 80*67e74705SXin Li // CHECK: <Declaration>typedef OpaquePtr<int> DeclGroupPtrTy</Declaration> 81*67e74705SXin Li typedef OpaquePtr<int> DeclGroupPtrTy; 82*67e74705SXin Li 83*67e74705SXin Li DeclGroupPtrTy blah; 84*67e74705SXin Li } 85