diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 5ed970bf7b85fdf9bbb3e20fba30bb02461faefc..ec90674e0c543909844ef1681e95790213d213ee 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -1838,6 +1838,7 @@ void StmtPrinter::VisitBlockExpr(BlockExpr *Node) { } OS << ')'; } + OS << "{ }"; } void StmtPrinter::VisitOpaqueValueExpr(OpaqueValueExpr *Node) { diff --git a/test/Index/comment-c-decls.c b/test/Index/comment-c-decls.c new file mode 100644 index 0000000000000000000000000000000000000000..e91f9b93ebe31cb66c3321d14ff80cb2a1060f50 --- /dev/null +++ b/test/Index/comment-c-decls.c @@ -0,0 +1,104 @@ +// RUN: rm -rf %t +// RUN: mkdir %t +// 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 +// RUN: FileCheck %s < %t/out + +// Ensure that XML we generate is not invalid. +// RUN: FileCheck %s -check-prefix=WRONG < %t/out +// WRONG-NOT: CommentXMLInvalid +// rdar://12378714 + +/** + * \brief Aaa. +*/ +int global_function(); +// CHECK: <Declaration>int global_function()</Declaration> + +/** + * \param x1 Aaa. +*/ +extern void external_function(int x1); +// CHECK: <Declaration>extern void external_function(int x1)</Declaration> + +/** + * \brief global variable; +*/ +int global_variable; +// CHECK: <Declaration>int global_variable</Declaration> + +/** + * \brief local variable; +*/ +static int static_variable; +// CHECK: <Declaration>static int static_variable</Declaration> + +/** + * \brief external variable +*/ +extern int external_variable; +// CHECK: <Declaration>extern int external_variable</Declaration> + +int global_function() { + /** + * \brief a local variable + */ + int local = 10; + return local; +} +// CHECK: <Declaration>int global_function()</Declaration> +// CHECK: <Declaration>int local = 10</Declaration> + +/** + * \brief initialized decl. +*/ +int initialized_global = 100; +// CHECK: <Declaration>int initialized_global = 100</Declaration> + +/** + * \brief typedef example +*/ +typedef int INT_T; +// CHECK: <Declaration>typedef int INT_T</Declaration> + +/** + * \brief aggregate type example +*/ +struct S { +/** + * \brief iS1; +*/ + int iS1; +/** + * \brief dS1; +*/ + double dS1; +}; +// CHECK: <Declaration>struct S {\n}</Declaration> +// CHECK: <Declaration>int iS1</Declaration> +// CHECK: <Declaration>double dS1</Declaration> + +/** + * \brief enum e; +*/ +enum e { + One, +/** + * \brief Two; +*/ + Two, + Three +}; +// CHECK: <Declaration>enum e {\n}</Declaration> +// CHECK: <Declaration>Two</Declaration> + +/** + *\brief block declaration +*/ +int (^Block) (int i, int j); +// CHECK: <Declaration>int (^Block)(int, int)</Declaration> + +/** + *\brief block declaration +*/ +int (^Block1) (int i, int j) = ^(int i, int j) { return i + j; }; +// CHECK: <Declaration>int (^Block1)(int, int) = ^(int i, int j){ }</Declaration>