13ec39215SFariborz Jahanian // RUN: rm -rf %t 23ec39215SFariborz Jahanian // RUN: mkdir %t 33ec39215SFariborz Jahanian // 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 43ec39215SFariborz Jahanian // RUN: FileCheck %s < %t/out 53ec39215SFariborz Jahanian 63ec39215SFariborz Jahanian // Ensure that XML we generate is not invalid. 73ec39215SFariborz Jahanian // RUN: FileCheck %s -check-prefix=WRONG < %t/out 83ec39215SFariborz Jahanian // WRONG-NOT: CommentXMLInvalid 93ec39215SFariborz Jahanian // rdar://12378714 103ec39215SFariborz Jahanian 113ec39215SFariborz Jahanian /** 123ec39215SFariborz Jahanian * \brief Aaa 133ec39215SFariborz Jahanian */ 143ec39215SFariborz Jahanian template<typename T> struct A { 153ec39215SFariborz Jahanian /** 163ec39215SFariborz Jahanian * \brief Bbb 173ec39215SFariborz Jahanian */ 183ec39215SFariborz Jahanian A(); 193ec39215SFariborz Jahanian /** 203ec39215SFariborz Jahanian * \brief Ccc 213ec39215SFariborz Jahanian */ 223ec39215SFariborz Jahanian ~A(); 233ec39215SFariborz Jahanian /** 243ec39215SFariborz Jahanian * \brief Ddd 253ec39215SFariborz Jahanian */ fA263ec39215SFariborz Jahanian void f() { } 273ec39215SFariborz Jahanian }; 28e7d10a1fSManuel Klimek // CHECK: <Declaration>template <typename T> struct A {}</Declaration> 29a14523f1SFariborz Jahanian // CHECK: <Declaration>A<T>()</Declaration> 302907b082SBenjamin Kramer // CHECK: <Declaration>~A<T>()</Declaration> 313ec39215SFariborz Jahanian 323ec39215SFariborz Jahanian /** 333ec39215SFariborz Jahanian * \Brief Eee 343ec39215SFariborz Jahanian */ 353ec39215SFariborz Jahanian template <typename T> struct D : A<T> { 363ec39215SFariborz Jahanian /** 373ec39215SFariborz Jahanian * \brief 383ec39215SFariborz Jahanian */ 393ec39215SFariborz Jahanian using A<T>::f; 403ec39215SFariborz Jahanian 413ec39215SFariborz Jahanian void f(); 423ec39215SFariborz Jahanian }; 43e7d10a1fSManuel Klimek // CHECK: <Declaration>template <typename T> struct D : A<T> {}</Declaration> 443ec39215SFariborz Jahanian // CHECK: <Declaration>using A<T>::f</Declaration> 45b42b6f26SFariborz Jahanian 46b42b6f26SFariborz Jahanian struct Base { 47b42b6f26SFariborz Jahanian int foo; 48b42b6f26SFariborz Jahanian }; 49b42b6f26SFariborz Jahanian /** 50b42b6f26SFariborz Jahanian * \brief 51b42b6f26SFariborz Jahanian */ 52b42b6f26SFariborz Jahanian template<typename T> struct E : Base { 53b42b6f26SFariborz Jahanian /** 54b42b6f26SFariborz Jahanian * \brief 55b42b6f26SFariborz Jahanian */ 56b42b6f26SFariborz Jahanian using Base::foo; 57b42b6f26SFariborz Jahanian }; 58e7d10a1fSManuel Klimek // CHECK: <Declaration>template <typename T> struct E : Base {}</Declaration> 59b42b6f26SFariborz Jahanian // CHECK: <Declaration>using Base::foo</Declaration> 60b42b6f26SFariborz Jahanian 61b42b6f26SFariborz Jahanian /// \tparam 62b42b6f26SFariborz Jahanian /// \param AAA Blah blah 63b42b6f26SFariborz Jahanian template<typename T> 64b42b6f26SFariborz Jahanian void func_template_1(T AAA); 65b42b6f26SFariborz Jahanian // CHECK: <Declaration>template <typename T> void func_template_1(T AAA)</Declaration> 66b42b6f26SFariborz Jahanian 67b42b6f26SFariborz Jahanian template<template<template<typename CCC> class DDD, class BBB> class AAA> 68b42b6f26SFariborz Jahanian void func_template_2(); 69e7d10a1fSManuel Klimek // FIXME: There is not Declaration field in the generated output. 70*7daabbd5SArgyrios Kyrtzidis 71*7daabbd5SArgyrios Kyrtzidis namespace rdar16128173 { 72*7daabbd5SArgyrios Kyrtzidis // CHECK: <Declaration>template <class PtrTy> class OpaquePtr {}</Declaration> 73*7daabbd5SArgyrios Kyrtzidis 74*7daabbd5SArgyrios Kyrtzidis /// \brief Wrapper for void* pointer. 75*7daabbd5SArgyrios Kyrtzidis /// \tparam PtrTy Either a pointer type like 'T*' or a type that behaves like 76*7daabbd5SArgyrios Kyrtzidis /// a pointer. 77*7daabbd5SArgyrios Kyrtzidis template <class PtrTy> 78*7daabbd5SArgyrios Kyrtzidis class OpaquePtr {}; 79*7daabbd5SArgyrios Kyrtzidis 80*7daabbd5SArgyrios Kyrtzidis // CHECK: <Declaration>typedef OpaquePtr<int> DeclGroupPtrTy</Declaration> 81*7daabbd5SArgyrios Kyrtzidis typedef OpaquePtr<int> DeclGroupPtrTy; 82*7daabbd5SArgyrios Kyrtzidis 83*7daabbd5SArgyrios Kyrtzidis DeclGroupPtrTy blah; 84*7daabbd5SArgyrios Kyrtzidis } 85