13e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// RUN: rm -rf %t
23e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// RUN: mkdir %t
33e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng -target x86_64-apple-darwin10 %s > %t/out
43e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// RUN: FileCheck %s < %t/out
53e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
63e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// Ensure that XML we generate is not invalid.
73e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// RUN: FileCheck %s -check-prefix=WRONG < %t/out
83e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// WRONG-NOT: CommentXMLInvalid
93e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// rdar://12378714
103e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
113e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
123e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief Aaa.
133e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
143e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianint global_function();
153e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>int global_function()</Declaration>
163e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
173e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
183e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \param x1 Aaa.
193e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
203e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianextern void external_function(int x1);
213e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>extern void external_function(int x1)</Declaration>
223e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
233e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
243e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief global variable;
253e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
263e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianint global_variable;
273e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>int global_variable</Declaration>
283e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
293e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
303e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief local variable;
313e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
323e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianstatic int static_variable;
333e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>static int static_variable</Declaration>
343e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
353e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
363e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief external variable
373e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
383e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianextern int external_variable;
393e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>extern int external_variable</Declaration>
403e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
413e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianint global_function() {
423e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  /**
433e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian   * \brief a local variable
443e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  */
453e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  int local = 10;
463e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  return local;
473e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian}
483e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>int global_function()</Declaration>
493e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>int local = 10</Declaration>
503e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
513e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
523e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief initialized decl.
533e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
543e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianint initialized_global = 100;
553e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>int initialized_global = 100</Declaration>
563e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
573e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
583e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief typedef example
593e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
603e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahaniantypedef int INT_T;
613e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>typedef int INT_T</Declaration>
623e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
633e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
643e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief aggregate type example
653e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
663e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianstruct S {
673e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
683e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief iS1;
693e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
703e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  int iS1;
713e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
723e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief dS1;
733e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
743e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  double dS1;
753e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian};
7636fab8d70eee342d66e03c9b09c029f126196103Manuel Klimek// CHECK: <Declaration>struct S {}</Declaration>
773e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>int iS1</Declaration>
783e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>double dS1</Declaration>
793e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
803e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
813e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief enum e;
823e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
833e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianenum e {
843e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  One,
853e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
863e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian * \brief Two;
873e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
883e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  Two,
893e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian  Three
903e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian};
912f1ac41a6d8d202dcc39ab8eb56ccea823dc062eManuel Klimek// CHECK: <Declaration>enum e {}</Declaration>
923e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian// CHECK: <Declaration>Two</Declaration>
933e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
943e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
953e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian *\brief block declaration
963e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
973e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianint (^Block) (int i, int j);
9846ef852618b18bc79e403b37a12c9b692e76126bDaniel Jasper// CHECK: <Declaration>int (^Block)(int, int)</Declaration>
993e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian
1003e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian/**
1013e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian *\brief block declaration
1023e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanian*/
1033e2fe86dd0dd65bff254e3bbdc0ea8df9282dc35Fariborz Jahanianint (^Block1) (int i, int j) = ^(int i, int j) { return i + j; };
10436fab8d70eee342d66e03c9b09c029f126196103Manuel Klimek// CHECK: <Declaration>int (^Block1)(int, int) = ^(int i, int j) {}</Declaration>
105