15e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// RUN: rm -rf %t
25e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// RUN: mkdir %t
35e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz 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
45e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// RUN: FileCheck %s < %t/out
55e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian
65e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// Ensure that XML we generate is not invalid.
75e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// RUN: FileCheck %s -check-prefix=WRONG < %t/out
85e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// WRONG-NOT: CommentXMLInvalid
95e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// rdar://12378714
105e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian
115e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian/**
125e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian * \brief Aaa
135e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian*/
145e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahaniantemplate<typename T> struct A {
155e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian/**
165e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian * \brief Bbb
175e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian*/
185e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian  A();
195e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian/**
205e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian * \brief Ccc
215e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian*/
225e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian  ~A();
235e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian/**
245e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian * \brief Ddd
255e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian*/
265e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian  void f() { }
275e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian};
2836fab8d70eee342d66e03c9b09c029f126196103Manuel Klimek// CHECK: <Declaration>template &lt;typename T&gt; struct A {}</Declaration>
29762661a077ffa73580d556a9dd149830662d972eFariborz Jahanian// CHECK: <Declaration>A&lt;T&gt;()</Declaration>
305e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// CHECK: <Declaration>void ~A&lt;T&gt;()</Declaration>
315e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian
325e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian/**
335e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian * \Brief Eee
345e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian*/
355e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahaniantemplate <typename T> struct D : A<T> {
365e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian/**
375e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian * \brief
385e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian*/
395e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian  using A<T>::f;
405e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian
415e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian  void f();
425e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian};
4336fab8d70eee342d66e03c9b09c029f126196103Manuel Klimek// CHECK: <Declaration>template &lt;typename T&gt; struct D :  A&lt;T&gt; {}</Declaration>
445e0ea1994be5b5b55fb8740548d7c7c151733b96Fariborz Jahanian// CHECK: <Declaration>using A&lt;T&gt;::f</Declaration>
455c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian
465c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanianstruct Base {
475c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian    int foo;
485c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian};
495c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian/**
505c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian * \brief
515c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian*/
525c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahaniantemplate<typename T> struct E : Base {
535c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian/**
545c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian * \brief
555c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian*/
565c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian  using Base::foo;
575c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian};
5836fab8d70eee342d66e03c9b09c029f126196103Manuel Klimek// CHECK: <Declaration>template &lt;typename T&gt; struct E :  Base {}</Declaration>
595c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian// CHECK: <Declaration>using Base::foo</Declaration>
605c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian
615c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian/// \tparam
625c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian/// \param AAA Blah blah
635c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahaniantemplate<typename T>
645c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanianvoid func_template_1(T AAA);
655c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian// CHECK: <Declaration>template &lt;typename T&gt; void func_template_1(T AAA)</Declaration>
665c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanian
675c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahaniantemplate<template<template<typename CCC> class DDD, class BBB> class AAA>
685c6ae4bd89dc374e47c570376db804be6c413efeFariborz Jahanianvoid func_template_2();
6936fab8d70eee342d66e03c9b09c029f126196103Manuel Klimek// FIXME: There is not Declaration field in the generated output.
70