summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/test')
-rw-r--r--clang-tools-extra/test/clang-doc/bc-comment.cpp282
-rw-r--r--clang-tools-extra/test/clang-doc/bc-linkage.cpp844
-rw-r--r--clang-tools-extra/test/clang-doc/bc-module.cpp87
-rw-r--r--clang-tools-extra/test/clang-doc/bc-namespace.cpp172
-rw-r--r--clang-tools-extra/test/clang-doc/bc-record.cpp390
-rw-r--r--clang-tools-extra/test/clang-doc/mapper-comment.cpp72
-rw-r--r--clang-tools-extra/test/clang-doc/mapper-linkage.cpp402
-rw-r--r--clang-tools-extra/test/clang-doc/mapper-module.cpp51
-rw-r--r--clang-tools-extra/test/clang-doc/mapper-namespace.cpp154
-rw-r--r--clang-tools-extra/test/clang-doc/mapper-record.cpp327
-rw-r--r--clang-tools-extra/test/clang-doc/module.cpp61
-rw-r--r--clang-tools-extra/test/clang-doc/public-comment.cpp138
-rw-r--r--clang-tools-extra/test/clang-doc/public-linkage.cpp299
-rw-r--r--clang-tools-extra/test/clang-doc/public-module.cpp84
-rw-r--r--clang-tools-extra/test/clang-doc/public-namespace.cpp96
-rw-r--r--clang-tools-extra/test/clang-doc/public-record.cpp208
-rw-r--r--clang-tools-extra/test/clang-doc/public-records.cpp341
-rw-r--r--clang-tools-extra/test/clang-doc/test_cases/linkage.cpp95
-rw-r--r--clang-tools-extra/test/clang-doc/test_cases/module.cpp15
-rw-r--r--clang-tools-extra/test/clang-doc/yaml-comment.cpp176
-rw-r--r--clang-tools-extra/test/clang-doc/yaml-linkage.cpp529
-rw-r--r--clang-tools-extra/test/clang-doc/yaml-module.cpp63
-rw-r--r--clang-tools-extra/test/clang-doc/yaml-namespace.cpp123
-rw-r--r--clang-tools-extra/test/clang-doc/yaml-record.cpp246
24 files changed, 3736 insertions, 1519 deletions
diff --git a/clang-tools-extra/test/clang-doc/bc-comment.cpp b/clang-tools-extra/test/clang-doc/bc-comment.cpp
index fa3ea7f7103..3b006ab8a6c 100644
--- a/clang-tools-extra/test/clang-doc/bc-comment.cpp
+++ b/clang-tools-extra/test/clang-doc/bc-comment.cpp
@@ -27,176 +27,178 @@ void F(int I, int J);
/// Bonus comment on definition
void F(int I, int J) {}
-// RUN: clang-doc --dump-intermediate --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --dump-intermediate --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/7574630614A535710E5A6ABCFFF98BCA2D06A4CA.bc | FileCheck %s --check-prefix CHECK-0
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-0
// CHECK-0: <BLOCKINFO_BLOCK/>
// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-0-NEXT: </VersionBlock>
-// CHECK-0-NEXT: <FunctionBlock NumWords=429 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=117 op2=116 op3=99 op4=6 op5=20 op6=165 op7=53 op8=113 op9=14 op10=90 op11=106 op12=188 op13=255 op14=249 op15=139 op16=202 op17=45 op18=6 op19=164 op20=202/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
-// CHECK-0-NEXT: <CommentBlock NumWords=354 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'FullComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=31 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'BlockCommandComment'
-// CHECK-0-NEXT: <Name abbrevid=6 op0=5/> blob data = 'brief'
-// CHECK-0-NEXT: <CommentBlock NumWords=19 BlockCodeSize=4>
+// CHECK-0-NEXT: <NamespaceBlock NumWords=432 BlockCodeSize=4>
+// CHECK-0-NEXT: <FunctionBlock NumWords=429 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
+// CHECK-0-NEXT: <CommentBlock NumWords=354 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'FullComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=11 BlockCodeSize=4>
+// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=19/> blob data = ' Brief description.'
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=37 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=26/> blob data = ' Extended description that'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=14 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=30/> blob data = ' continues onto the next line.'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=76 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=14 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'HTMLStartTagComment'
-// CHECK-0-NEXT: <Name abbrevid=6 op0=2/> blob data = 'ul'
-// CHECK-0-NEXT: <AttrKey abbrevid=12 op0=5/> blob data = 'class'
-// CHECK-0-NEXT: <AttrVal abbrevid=13 op0=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=9 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'HTMLStartTagComment'
-// CHECK-0-NEXT: <Name abbrevid=6 op0=2/> blob data = 'li'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=9 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=9/> blob data = ' Testing.'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=9 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=17/> blob data = 'HTMLEndTagComment'
-// CHECK-0-NEXT: <Name abbrevid=6 op0=2/> blob data = 'ul'
-// CHECK-0-NEXT: <SelfClosing abbrevid=10 op0=1/>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=32 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=20/> blob data = 'VerbatimBlockComment'
-// CHECK-0-NEXT: <Name abbrevid=6 op0=8/> blob data = 'verbatim'
-// CHECK-0-NEXT: <CloseName abbrevid=9 op0=11/> blob data = 'endverbatim'
-// CHECK-0-NEXT: <CommentBlock NumWords=16 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=24/> blob data = 'VerbatimBlockLineComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=27/> blob data = ' The description continues.'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=22 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=7 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=3/> blob data = ' --'
+// CHECK-0-NEXT: <CommentBlock NumWords=31 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'BlockCommandComment'
+// CHECK-0-NEXT: <Name abbrevid=6 op0=5/> blob data = 'brief'
+// CHECK-0-NEXT: <CommentBlock NumWords=19 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=11 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=19/> blob data = ' Brief description.'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=37 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=26/> blob data = ' Extended description that'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=14 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=30/> blob data = ' continues onto the next line.'
+// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=39 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'ParamCommandComment'
-// CHECK-0-NEXT: <Direction abbrevid=7 op0=5/> blob data = '[out]'
-// CHECK-0-NEXT: <ParamName abbrevid=8 op0=1/> blob data = 'I'
-// CHECK-0-NEXT: <Explicit abbrevid=11 op0=1/>
-// CHECK-0-NEXT: <CommentBlock NumWords=25 BlockCodeSize=4>
+// CHECK-0-NEXT: <CommentBlock NumWords=76 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=14 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'HTMLStartTagComment'
+// CHECK-0-NEXT: <Name abbrevid=6 op0=2/> blob data = 'ul'
+// CHECK-0-NEXT: <AttrKey abbrevid=12 op0=5/> blob data = 'class'
+// CHECK-0-NEXT: <AttrVal abbrevid=13 op0=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=9 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'HTMLStartTagComment'
+// CHECK-0-NEXT: <Name abbrevid=6 op0=2/> blob data = 'li'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=9 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=16/> blob data = ' is a parameter.'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=9/> blob data = ' Testing.'
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=9 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=17/> blob data = 'HTMLEndTagComment'
+// CHECK-0-NEXT: <Name abbrevid=6 op0=2/> blob data = 'ul'
+// CHECK-0-NEXT: <SelfClosing abbrevid=10 op0=1/>
+// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=38 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'ParamCommandComment'
-// CHECK-0-NEXT: <Direction abbrevid=7 op0=4/> blob data = '[in]'
-// CHECK-0-NEXT: <ParamName abbrevid=8 op0=1/> blob data = 'J'
-// CHECK-0-NEXT: <CommentBlock NumWords=25 BlockCodeSize=4>
+// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=16/> blob data = ' is a parameter.'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=32 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=20/> blob data = 'VerbatimBlockComment'
+// CHECK-0-NEXT: <Name abbrevid=6 op0=8/> blob data = 'verbatim'
+// CHECK-0-NEXT: <CloseName abbrevid=9 op0=11/> blob data = 'endverbatim'
+// CHECK-0-NEXT: <CommentBlock NumWords=16 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=24/> blob data = 'VerbatimBlockLineComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=27/> blob data = ' The description continues.'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=22 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=7 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=3/> blob data = ' --'
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=39 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'ParamCommandComment'
+// CHECK-0-NEXT: <Direction abbrevid=7 op0=5/> blob data = '[out]'
+// CHECK-0-NEXT: <ParamName abbrevid=8 op0=1/> blob data = 'I'
+// CHECK-0-NEXT: <Explicit abbrevid=11 op0=1/>
+// CHECK-0-NEXT: <CommentBlock NumWords=25 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=16/> blob data = ' is a parameter.'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=38 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'ParamCommandComment'
+// CHECK-0-NEXT: <Direction abbrevid=7 op0=4/> blob data = '[in]'
+// CHECK-0-NEXT: <ParamName abbrevid=8 op0=1/> blob data = 'J'
+// CHECK-0-NEXT: <CommentBlock NumWords=25 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=16/> blob data = ' is a parameter.'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=5 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: <CommentBlock NumWords=28 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'BlockCommandComment'
+// CHECK-0-NEXT: <Name abbrevid=6 op0=6/> blob data = 'return'
+// CHECK-0-NEXT: <CommentBlock NumWords=16 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=5/> blob data = ' void'
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
+// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: <CommentBlock NumWords=28 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=19/> blob data = 'BlockCommandComment'
-// CHECK-0-NEXT: <Name abbrevid=6 op0=6/> blob data = 'return'
-// CHECK-0-NEXT: <CommentBlock NumWords=16 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'FullComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=21 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=5/> blob data = ' void'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=28/> blob data = ' Bonus comment on definition'
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <CommentBlock NumWords=28 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'FullComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=21 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=28/> blob data = ' Bonus comment on definition'
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: <Location abbrevid=7 op0=25 op1=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: </TypeBlock>
-// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'I'
-// CHECK-0-NEXT: </FieldTypeBlock>
-// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'J'
-// CHECK-0-NEXT: </FieldTypeBlock>
-// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=25 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'I'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'J'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/bc-linkage.cpp b/clang-tools-extra/test/clang-doc/bc-linkage.cpp
new file mode 100644
index 00000000000..8fec0d351d9
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/bc-linkage.cpp
@@ -0,0 +1,844 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// REQUIRES: system-linux
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+void function(int x);
+
+inline int inlinedFunction(int x);
+
+int functionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+inline int inlinedFunctionWithInnerClass(int x) {
+ class InnerClass { //VisibleNoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+class Class {
+public:
+ void publicMethod();
+ int publicField;
+
+protected:
+ void protectedMethod();
+ int protectedField;
+
+private:
+ void privateMethod();
+ int privateField;
+};
+
+namespace named {
+class NamedClass {
+public:
+ void namedPublicMethod();
+ int namedPublicField;
+
+protected:
+ void namedProtectedMethod();
+ int namedProtectedField;
+
+private:
+ void namedPrivateMethod();
+ int namedPrivateField;
+};
+
+void namedFunction();
+static void namedStaticFunction();
+inline void namedInlineFunction();
+} // namespace named
+
+static void staticFunction(int x); //Internal Linkage
+
+static int staticFunctionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+namespace {
+class AnonClass {
+public:
+ void anonPublicMethod();
+ int anonPublicField;
+
+protected:
+ void anonProtectedMethod();
+ int anonProtectedField;
+
+private:
+ void anonPrivateMethod();
+ int anonPrivateField;
+};
+
+void anonFunction();
+static void anonStaticFunction();
+inline void anonInlineFunction();
+} // namespace
+
+// RUN: clang-doc --dump-intermediate --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/C9B3B71ACDD84C5BB320D34E97677715CDB3EA32.bc | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: <BLOCKINFO_BLOCK/>
+// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-0-NEXT: </VersionBlock>
+// CHECK-0-NEXT: <RecordBlock NumWords=107 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=17 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=29/> blob data = 'inlinedFunctionWithInnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=24 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-0-NEXT: <FunctionBlock NumWords=71 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=17/> blob data = 'innerPublicMethod'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=17 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=29/> blob data = 'inlinedFunctionWithInnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=26 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/8960B5C9247D6F5C532756E53A1AD1240FA2146F.bc | FileCheck %s --check-prefix CHECK-1
+// CHECK-1: <BLOCKINFO_BLOCK/>
+// CHECK-1-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-1-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-1-NEXT: </VersionBlock>
+// CHECK-1-NEXT: <NamespaceBlock NumWords=126 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-1-NEXT: <FunctionBlock NumWords=36 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=13/> blob data = 'namedFunction'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <Location abbrevid=7 op0=61 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: </TypeBlock>
+// CHECK-1-NEXT: </FunctionBlock>
+// CHECK-1-NEXT: <FunctionBlock NumWords=37 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=19/> blob data = 'namedStaticFunction'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <Location abbrevid=7 op0=62 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: </TypeBlock>
+// CHECK-1-NEXT: </FunctionBlock>
+// CHECK-1-NEXT: <FunctionBlock NumWords=37 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=19/> blob data = 'namedInlineFunction'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <Location abbrevid=7 op0=63 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: </TypeBlock>
+// CHECK-1-NEXT: </FunctionBlock>
+// CHECK-1-NEXT: </NamespaceBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/74A031CBE68C101F3E83F60ED17F20C11EC19D48.bc | FileCheck %s --check-prefix CHECK-2
+// CHECK-2: <BLOCKINFO_BLOCK/>
+// CHECK-2-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-2-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-2-NEXT: </VersionBlock>
+// CHECK-2-NEXT: <RecordBlock NumWords=105 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-2-NEXT: <ReferenceBlock NumWords=16 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=28/> blob data = 'staticFunctionWithInnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=69 op1=4/> blob data = '{{.*}}'
+// CHECK-2-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-2-NEXT: <FunctionBlock NumWords=70 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=17/> blob data = 'innerPublicMethod'
+// CHECK-2-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <ReferenceBlock NumWords=16 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=28/> blob data = 'staticFunctionWithInnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=71 op1=4/> blob data = '{{.*}}'
+// CHECK-2-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-2-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: </TypeBlock>
+// CHECK-2-NEXT: </FunctionBlock>
+// CHECK-2-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/7CDD73DCD6CD72F7E5CE25502810A182C66C4B45.bc | FileCheck %s --check-prefix CHECK-3
+// CHECK-3: <BLOCKINFO_BLOCK/>
+// CHECK-3-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-3-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-3-NEXT: </VersionBlock>
+// CHECK-3-NEXT: <RecordBlock NumWords=203 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <DefLocation abbrevid=6 op0=32 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-3-NEXT: <MemberTypeBlock NumWords=10 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <Name abbrevid=4 op0=11/> blob data = 'publicField'
+// CHECK-3-NEXT: <Access abbrevid=5 op0=3/>
+// CHECK-3-NEXT: </MemberTypeBlock>
+// CHECK-3-NEXT: <MemberTypeBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <Name abbrevid=4 op0=14/> blob data = 'protectedField'
+// CHECK-3-NEXT: <Access abbrevid=5 op0=1/>
+// CHECK-3-NEXT: </MemberTypeBlock>
+// CHECK-3-NEXT: <MemberTypeBlock NumWords=10 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <Name abbrevid=4 op0=12/> blob data = 'privateField'
+// CHECK-3-NEXT: <Access abbrevid=5 op0=2/>
+// CHECK-3-NEXT: </MemberTypeBlock>
+// CHECK-3-NEXT: <FunctionBlock NumWords=48 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=12/> blob data = 'publicMethod'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-3-NEXT: <Location abbrevid=7 op0=34 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: </TypeBlock>
+// CHECK-3-NEXT: </FunctionBlock>
+// CHECK-3-NEXT: <FunctionBlock NumWords=49 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=15/> blob data = 'protectedMethod'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-3-NEXT: <Location abbrevid=7 op0=38 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: </TypeBlock>
+// CHECK-3-NEXT: </FunctionBlock>
+// CHECK-3-NEXT: <FunctionBlock NumWords=49 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=13/> blob data = 'privateMethod'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-3-NEXT: <Location abbrevid=7 op0=42 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: </TypeBlock>
+// CHECK-3-NEXT: </FunctionBlock>
+// CHECK-3-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/85427901413EC77C961019EBB3ADEF7B0BAAFE78.bc | FileCheck %s --check-prefix CHECK-4
+// CHECK-4: <BLOCKINFO_BLOCK/>
+// CHECK-4-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-4-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-4-NEXT: </VersionBlock>
+// CHECK-4-NEXT: <RecordBlock NumWords=103 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=15 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=22/> blob data = 'functionWithInnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=15 op1=4/> blob data = '{{.*}}'
+// CHECK-4-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-4-NEXT: <FunctionBlock NumWords=69 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=17/> blob data = 'innerPublicMethod'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <ReferenceBlock NumWords=15 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=22/> blob data = 'functionWithInnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-4-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-4-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: </TypeBlock>
+// CHECK-4-NEXT: </FunctionBlock>
+// CHECK-4-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-5
+// CHECK-5: <BLOCKINFO_BLOCK/>
+// CHECK-5-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-5-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-5-NEXT: </VersionBlock>
+// CHECK-5-NEXT: <NamespaceBlock NumWords=218 BlockCodeSize=4>
+// CHECK-5-NEXT: <FunctionBlock NumWords=31 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=8/> blob data = 'function'
+// CHECK-5-NEXT: <Location abbrevid=7 op0=10 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: <FunctionBlock NumWords=33 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=15/> blob data = 'inlinedFunction'
+// CHECK-5-NEXT: <Location abbrevid=7 op0=12 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: <FunctionBlock NumWords=35 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=22/> blob data = 'functionWithInnerClass'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=14 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: <FunctionBlock NumWords=37 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=29/> blob data = 'inlinedFunctionWithInnerClass'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: <FunctionBlock NumWords=33 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=14/> blob data = 'staticFunction'
+// CHECK-5-NEXT: <Location abbrevid=7 op0=66 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: <FunctionBlock NumWords=36 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=28/> blob data = 'staticFunctionWithInnerClass'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=68 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: </NamespaceBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/4712C5FA37B298A25501D1033C619B65B0ECC449.bc | FileCheck %s --check-prefix CHECK-6
+// CHECK-6: <BLOCKINFO_BLOCK/>
+// CHECK-6-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-6-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-6-NEXT: </VersionBlock>
+// CHECK-6-NEXT: <RecordBlock NumWords=270 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <DefLocation abbrevid=6 op0=47 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-6-NEXT: <MemberTypeBlock NumWords=11 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <Name abbrevid=4 op0=16/> blob data = 'namedPublicField'
+// CHECK-6-NEXT: <Access abbrevid=5 op0=3/>
+// CHECK-6-NEXT: </MemberTypeBlock>
+// CHECK-6-NEXT: <MemberTypeBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <Name abbrevid=4 op0=19/> blob data = 'namedProtectedField'
+// CHECK-6-NEXT: <Access abbrevid=5 op0=1/>
+// CHECK-6-NEXT: </MemberTypeBlock>
+// CHECK-6-NEXT: <MemberTypeBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <Name abbrevid=4 op0=17/> blob data = 'namedPrivateField'
+// CHECK-6-NEXT: <Access abbrevid=5 op0=2/>
+// CHECK-6-NEXT: </MemberTypeBlock>
+// CHECK-6-NEXT: <FunctionBlock NumWords=65 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=17/> blob data = 'namedPublicMethod'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-6-NEXT: <Location abbrevid=7 op0=49 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: </TypeBlock>
+// CHECK-6-NEXT: </FunctionBlock>
+// CHECK-6-NEXT: <FunctionBlock NumWords=65 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=20/> blob data = 'namedProtectedMethod'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-6-NEXT: <Location abbrevid=7 op0=53 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: </TypeBlock>
+// CHECK-6-NEXT: </FunctionBlock>
+// CHECK-6-NEXT: <FunctionBlock NumWords=65 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=18/> blob data = 'namedPrivateMethod'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-6-NEXT: <Location abbrevid=7 op0=57 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: </TypeBlock>
+// CHECK-6-NEXT: </FunctionBlock>
+// CHECK-6-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/6E8FB72A89761E77020BFCEE9A9A6E64B15CC2A9.bc | FileCheck %s --check-prefix CHECK-7
+// CHECK-7: <BLOCKINFO_BLOCK/>
+// CHECK-7-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-7-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-7-NEXT: </VersionBlock>
+// CHECK-7-NEXT: <RecordBlock NumWords=252 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <DefLocation abbrevid=6 op0=78 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-7-NEXT: <MemberTypeBlock NumWords=11 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <Name abbrevid=4 op0=15/> blob data = 'anonPublicField'
+// CHECK-7-NEXT: <Access abbrevid=5 op0=3/>
+// CHECK-7-NEXT: </MemberTypeBlock>
+// CHECK-7-NEXT: <MemberTypeBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <Name abbrevid=4 op0=18/> blob data = 'anonProtectedField'
+// CHECK-7-NEXT: <Access abbrevid=5 op0=1/>
+// CHECK-7-NEXT: </MemberTypeBlock>
+// CHECK-7-NEXT: <MemberTypeBlock NumWords=11 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <Name abbrevid=4 op0=16/> blob data = 'anonPrivateField'
+// CHECK-7-NEXT: <Access abbrevid=5 op0=2/>
+// CHECK-7-NEXT: </MemberTypeBlock>
+// CHECK-7-NEXT: <FunctionBlock NumWords=60 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=16/> blob data = 'anonPublicMethod'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-7-NEXT: <Location abbrevid=7 op0=80 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: </TypeBlock>
+// CHECK-7-NEXT: </FunctionBlock>
+// CHECK-7-NEXT: <FunctionBlock NumWords=61 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=19/> blob data = 'anonProtectedMethod'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-7-NEXT: <Location abbrevid=7 op0=84 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: </TypeBlock>
+// CHECK-7-NEXT: </FunctionBlock>
+// CHECK-7-NEXT: <FunctionBlock NumWords=61 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=17/> blob data = 'anonPrivateMethod'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-7-NEXT: <Location abbrevid=7 op0=88 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: </TypeBlock>
+// CHECK-7-NEXT: </FunctionBlock>
+// CHECK-7-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/83CC52D32583E0771710A7742DE81C839E953AC8.bc | FileCheck %s --check-prefix CHECK-8
+// CHECK-8: <BLOCKINFO_BLOCK/>
+// CHECK-8-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-8-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-8-NEXT: </VersionBlock>
+// CHECK-8-NEXT: <NamespaceBlock NumWords=109 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <FunctionBlock NumWords=31 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=12/> blob data = 'anonFunction'
+// CHECK-8-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-8-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Location abbrevid=7 op0=92 op1=4/> blob data = '{{.*}}'
+// CHECK-8-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: </TypeBlock>
+// CHECK-8-NEXT: </FunctionBlock>
+// CHECK-8-NEXT: <FunctionBlock NumWords=33 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=18/> blob data = 'anonStaticFunction'
+// CHECK-8-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-8-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Location abbrevid=7 op0=93 op1=4/> blob data = '{{.*}}'
+// CHECK-8-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: </TypeBlock>
+// CHECK-8-NEXT: </FunctionBlock>
+// CHECK-8-NEXT: <FunctionBlock NumWords=33 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=18/> blob data = 'anonInlineFunction'
+// CHECK-8-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-8-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Location abbrevid=7 op0=94 op1=4/> blob data = '{{.*}}'
+// CHECK-8-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: </TypeBlock>
+// CHECK-8-NEXT: </FunctionBlock>
+// CHECK-8-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/bc-module.cpp b/clang-tools-extra/test/clang-doc/bc-module.cpp
new file mode 100644
index 00000000000..101d8da8564
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/bc-module.cpp
@@ -0,0 +1,87 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+export module M;
+
+int moduleFunction(int x); // ModuleLinkage
+
+static int staticModuleFunction(int x); // ModuleInternalLinkage
+
+export double exportedModuleFunction(double y, int z); // ExternalLinkage
+
+// RUN: clang-doc --dump-intermediate --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: <BLOCKINFO_BLOCK/>
+// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-0-NEXT: </VersionBlock>
+// CHECK-0-NEXT: <NamespaceBlock NumWords=121 BlockCodeSize=4>
+// CHECK-0-NEXT: <FunctionBlock NumWords=33 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=14/> blob data = 'moduleFunction'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=11 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: <FunctionBlock NumWords=34 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=20/> blob data = 'staticModuleFunction'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=13 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: <FunctionBlock NumWords=47 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=22/> blob data = 'exportedModuleFunction'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=15 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=7 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=4 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=6/> blob data = 'double'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=9 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=4 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=6/> blob data = 'double'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'y'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'z'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/bc-namespace.cpp b/clang-tools-extra/test/clang-doc/bc-namespace.cpp
index b1c03636c9c..79b35bd9a7f 100644
--- a/clang-tools-extra/test/clang-doc/bc-namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/bc-namespace.cpp
@@ -25,115 +25,97 @@ E func(int i) { return X; }
} // namespace B
} // namespace A
-// RUN: clang-doc --dump-intermediate --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --dump-intermediate --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/E9ABF7E7E2425B626723D41E76E4BC7E7A5BD775.bc | FileCheck %s --check-prefix CHECK-0
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/8D042EFFC98B373450BC6B5B90A330C25A150E9C.bc | FileCheck %s --check-prefix CHECK-0
// CHECK-0: <BLOCKINFO_BLOCK/>
// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-0-NEXT: </VersionBlock>
-// CHECK-0-NEXT: <EnumBlock NumWords=38 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=233 op2=171 op3=247 op4=231 op5=226 op6=66 op7=91 op8=98 op9=103 op10=35 op11=212 op12=30 op13=118 op14=228 op15=188 op16=126 op17=122 op18=91 op19=215 op20=117/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=226 op2=26 op3=247 op4=158 op5=42 op6=157 op7=2 op8=85 op9=75 op10=160 op11=144 op12=209 op13=13 op14=243 op15=159 op16=226 op17=115 op18=245 op19=205 op20=181/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-0-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-0-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
-// CHECK-0-NEXT: </EnumBlock>
+// CHECK-0-NEXT: <NamespaceBlock NumWords=46 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-0-NEXT: <FunctionBlock NumWords=35 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'f'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=11 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </NamespaceBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/39D3C95A5F7CE2BA4937BD7B01BAE09EBC2AD8AC.bc | FileCheck %s --check-prefix CHECK-1
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/E21AF79E2A9D02554BA090D10DF39FE273F5CDB5.bc | FileCheck %s --check-prefix CHECK-1
// CHECK-1: <BLOCKINFO_BLOCK/>
// CHECK-1-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-1-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-1-NEXT: </VersionBlock>
-// CHECK-1-NEXT: <FunctionBlock NumWords=35 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=57 op2=211 op3=201 op4=90 op5=95 op6=124 op7=226 op8=186 op9=73 op10=55 op11=189 op12=123 op13=1 op14=186 op15=224 op16=158 op17=188 op18=42 op19=216 op20=172/>
-// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'f'
+// CHECK-1-NEXT: <NamespaceBlock NumWords=119 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
// CHECK-1-NEXT: </ReferenceBlock>
-// CHECK-1-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
-// CHECK-1-NEXT: <Location abbrevid=7 op0=11 op1=4/> blob data = '{{.*}}'
-// CHECK-1-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: <FunctionBlock NumWords=56 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'func'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
// CHECK-1-NEXT: </ReferenceBlock>
-// CHECK-1-NEXT: </TypeBlock>
-// CHECK-1-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/9A82CB33ED0FDF81EE383D31CD0957D153C5E840.bc | FileCheck %s --check-prefix CHECK-2
-// CHECK-2: <BLOCKINFO_BLOCK/>
-// CHECK-2-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-2-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-2-NEXT: </VersionBlock>
-// CHECK-2-NEXT: <FunctionBlock NumWords=56 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=154 op2=130 op3=203 op4=51 op5=237 op6=15 op7=223 op8=129 op9=238 op10=56 op11=61 op12=49 op13=205 op14=9 op15=87 op16=209 op17=83 op18=197 op19=232 op20=64/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=4/> blob data = 'func'
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=226 op2=26 op3=247 op4=158 op5=42 op6=157 op7=2 op8=85 op9=75 op10=160 op11=144 op12=209 op13=13 op14=243 op15=159 op16=226 op17=115 op18=245 op19=205 op20=181/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
-// CHECK-2-NEXT: <TypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=5 BlockCodeSize=4>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=12/> blob data = 'enum A::B::E'
-// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: </TypeBlock>
-// CHECK-2-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
-// CHECK-2-NEXT: </FieldTypeBlock>
-// CHECK-2-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/8D042EFFC98B373450BC6B5B90A330C25A150E9C.bc | FileCheck %s --check-prefix CHECK-3
-// CHECK-3: <BLOCKINFO_BLOCK/>
-// CHECK-3-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-3-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-3-NEXT: </VersionBlock>
-// CHECK-3-NEXT: <NamespaceBlock NumWords=9 BlockCodeSize=4>
-// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-3-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-3-NEXT: </NamespaceBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/E21AF79E2A9D02554BA090D10DF39FE273F5CDB5.bc | FileCheck %s --check-prefix CHECK-4
-// CHECK-4: <BLOCKINFO_BLOCK/>
-// CHECK-4-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-4-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-4-NEXT: </VersionBlock>
-// CHECK-4-NEXT: <NamespaceBlock NumWords=21 BlockCodeSize=4>
-// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1=226 op2=26 op3=247 op4=158 op5=42 op6=157 op7=2 op8=85 op9=75 op10=160 op11=144 op12=209 op13=13 op14=243 op15=159 op16=226 op17=115 op18=245 op19=205 op20=181/>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-4-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-4-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-4-NEXT: </ReferenceBlock>
-// CHECK-4-NEXT: </NamespaceBlock>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <TypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=5 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=12/> blob data = 'enum A::B::E'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: </TypeBlock>
+// CHECK-1-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
+// CHECK-1-NEXT: </FieldTypeBlock>
+// CHECK-1-NEXT: </FunctionBlock>
+// CHECK-1-NEXT: <EnumBlock NumWords=38 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
+// CHECK-1-NEXT: </EnumBlock>
+// CHECK-1-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/bc-record.cpp b/clang-tools-extra/test/clang-doc/bc-record.cpp
index 7a09118c711..a0e2244856a 100644
--- a/clang-tools-extra/test/clang-doc/bc-record.cpp
+++ b/clang-tools-extra/test/clang-doc/bc-record.cpp
@@ -39,7 +39,7 @@ class X {
class Y {};
};
-// RUN: clang-doc --dump-intermediate --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --dump-intermediate --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
// RUN: llvm-bcanalyzer --dump %t/docs/bc/289584A8E0FF4178A794622A547AA622503967A1.bc | FileCheck %s --check-prefix CHECK-0
@@ -47,11 +47,84 @@ class X {
// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-0-NEXT: </VersionBlock>
-// CHECK-0-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
+// CHECK-0-NEXT: <RecordBlock NumWords=157 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=25 op1=4/> blob data = '{{.*}}'
// CHECK-0-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-0-NEXT: <FunctionBlock NumWords=44 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=27 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: <FunctionBlock NumWords=44 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=2/> blob data = '~E'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: <FunctionBlock NumWords=50 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=15/> blob data = 'ProtectedMethod'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=34 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=31 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
// CHECK-0-NEXT: </RecordBlock>
// RUN: llvm-bcanalyzer --dump %t/docs/bc/3FB542274573CAEAD54CEBFFCAEE3D77FB9713D8.bc | FileCheck %s --check-prefix CHECK-1
@@ -60,10 +133,10 @@ class X {
// CHECK-1-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-1-NEXT: </VersionBlock>
// CHECK-1-NEXT: <RecordBlock NumWords=24 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=63 op2=181 op3=66 op4=39 op5=69 op6=115 op7=202 op8=234 op9=213 op10=76 op11=235 op12=255 op13=202 op14=238 op15=61 op16=119 op17=251 op18=151 op19=19 op20=216/>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'I'
// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=182 op2=172 op3=76 op4=92 op5=159 op6=46 op7=163 op8=242 op9=179 op10=236 op11=225 op12=163 op13=61 op14=52 op15=159 op16=78 op17=229 op18=2 op19=178 op20=78/>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
// CHECK-1-NEXT: <RefType abbrevid=6 op0=3/>
// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
@@ -72,250 +145,149 @@ class X {
// CHECK-1-NEXT: <TagType abbrevid=8 op0=3/>
// CHECK-1-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/5093D428CDC62096A67547BA52566E4FB9404EEE.bc | FileCheck %s --check-prefix CHECK-2
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/CA7C7935730B5EACD25F080E9C83FA087CCDC75E.bc | FileCheck %s --check-prefix CHECK-2
// CHECK-2: <BLOCKINFO_BLOCK/>
// CHECK-2-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-2-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-2-NEXT: </VersionBlock>
-// CHECK-2-NEXT: <FunctionBlock NumWords=50 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=80 op2=147 op3=212 op4=40 op5=205 op6=198 op7=32 op8=150 op9=166 op10=117 op11=71 op12=186 op13=82 op14=86 op15=110 op16=79 op17=185 op18=64 op19=78 op20=238/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=15/> blob data = 'ProtectedMethod'
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <IsMethod abbrevid=9 op0=1/>
-// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=34 op1=4/> blob data = '{{.*}}'
-// CHECK-2-NEXT: <Location abbrevid=7 op0=31 op1=4/> blob data = '{{.*}}'
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=2/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: </TypeBlock>
-// CHECK-2-NEXT: </FunctionBlock>
+// CHECK-2-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
+// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=38 op1=4/> blob data = '{{.*}}'
+// CHECK-2-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-2-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/CA7C7935730B5EACD25F080E9C83FA087CCDC75E.bc | FileCheck %s --check-prefix CHECK-3
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/06B5F6A19BA9F6A832E127C9968282B94619B210.bc | FileCheck %s --check-prefix CHECK-3
// CHECK-3: <BLOCKINFO_BLOCK/>
// CHECK-3-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-3-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-3-NEXT: </VersionBlock>
-// CHECK-3-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
-// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1=202 op2=124 op3=121 op4=53 op5=115 op6=11 op7=94 op8=172 op9=210 op10=95 op11=8 op12=14 op13=156 op14=131 op15=250 op16=8 op17=124 op18=205 op19=199 op20=94/>
-// CHECK-3-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
-// CHECK-3-NEXT: <DefLocation abbrevid=6 op0=38 op1=4/> blob data = '{{.*}}'
-// CHECK-3-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-3-NEXT: <RecordBlock NumWords=22 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=1/> blob data = 'C'
+// CHECK-3-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
+// CHECK-3-NEXT: <Access abbrevid=5 op0=3/>
+// CHECK-3-NEXT: </MemberTypeBlock>
// CHECK-3-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/B6AC4C5C9F2EA3F2B3ECE1A33D349F4EE502B24E.bc | FileCheck %s --check-prefix CHECK-4
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/641AB4A3D36399954ACDE29C7A8833032BF40472.bc | FileCheck %s --check-prefix CHECK-4
// CHECK-4: <BLOCKINFO_BLOCK/>
// CHECK-4-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-4-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-4-NEXT: </VersionBlock>
-// CHECK-4-NEXT: <FunctionBlock NumWords=20 BlockCodeSize=4>
-// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1=182 op2=172 op3=76 op4=92 op5=159 op6=46 op7=163 op8=242 op9=179 op10=236 op11=225 op12=163 op13=61 op14=52 op15=159 op16=78 op17=229 op18=2 op19=178 op20=78/>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
-// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=11 op1=4/> blob data = '{{.*}}'
-// CHECK-4-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-4-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-4-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-4-NEXT: </ReferenceBlock>
-// CHECK-4-NEXT: </TypeBlock>
-// CHECK-4-NEXT: </FunctionBlock>
+// CHECK-4-NEXT: <RecordBlock NumWords=24 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'Y'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=39 op1=4/> blob data = '{{.*}}'
+// CHECK-4-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-4-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/06B5F6A19BA9F6A832E127C9968282B94619B210.bc | FileCheck %s --check-prefix CHECK-5
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-5
// CHECK-5: <BLOCKINFO_BLOCK/>
// CHECK-5-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-5-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-5-NEXT: </VersionBlock>
-// CHECK-5-NEXT: <RecordBlock NumWords=22 BlockCodeSize=4>
-// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1=6 op2=181 op3=246 op4=161 op5=155 op6=169 op7=246 op8=168 op9=50 op10=225 op11=39 op12=201 op13=150 op14=130 op15=130 op16=185 op17=70 op18=25 op19=178 op20=16/>
-// CHECK-5-NEXT: <Name abbrevid=5 op0=1/> blob data = 'C'
-// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
-// CHECK-5-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-5-NEXT: </ReferenceBlock>
-// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
-// CHECK-5-NEXT: <Access abbrevid=5 op0=3/>
-// CHECK-5-NEXT: </MemberTypeBlock>
-// CHECK-5-NEXT: </RecordBlock>
+// CHECK-5-NEXT: <NamespaceBlock NumWords=59 BlockCodeSize=4>
+// CHECK-5-NEXT: <FunctionBlock NumWords=20 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=11 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
+// CHECK-5-NEXT: <Member abbrevid=8 op0=1/> blob data = 'Y'
+// CHECK-5-NEXT: </EnumBlock>
+// CHECK-5-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=2/> blob data = 'Bc'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=19 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <Scoped abbrevid=9 op0=1/>
+// CHECK-5-NEXT: <Member abbrevid=8 op0=1/> blob data = 'A'
+// CHECK-5-NEXT: <Member abbrevid=8 op0=1/> blob data = 'B'
+// CHECK-5-NEXT: </EnumBlock>
+// CHECK-5-NEXT: </NamespaceBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/BD2BDEBD423F80BACCEA75DE6D6622D355FC2D17.bc | FileCheck %s --check-prefix CHECK-6
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0921737541208B8FA9BB42B60F78AC1D779AA054.bc | FileCheck %s --check-prefix CHECK-6
// CHECK-6: <BLOCKINFO_BLOCK/>
// CHECK-6-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-6-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-6-NEXT: </VersionBlock>
-// CHECK-6-NEXT: <FunctionBlock NumWords=44 BlockCodeSize=4>
-// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1=189 op2=43 op3=222 op4=189 op5=66 op6=63 op7=128 op8=186 op9=204 op10=234 op11=117 op12=222 op13=109 op14=102 op15=34 op16=211 op17=85 op18=252 op19=45 op20=23/>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=2/> blob data = '~E'
-// CHECK-6-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-6-NEXT: </ReferenceBlock>
-// CHECK-6-NEXT: <IsMethod abbrevid=9 op0=1/>
-// CHECK-6-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
-// CHECK-6-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-6-NEXT: <Field abbrevid=7 op0=2/>
-// CHECK-6-NEXT: </ReferenceBlock>
-// CHECK-6-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-6-NEXT: </ReferenceBlock>
-// CHECK-6-NEXT: </TypeBlock>
-// CHECK-6-NEXT: </FunctionBlock>
+// CHECK-6-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
+// CHECK-6-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-6-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/DEB4AC1CD9253CD9EF7FBE6BCAC506D77984ABD4.bc | FileCheck %s --check-prefix CHECK-7
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/E3B54702FABFF4037025BA194FC27C47006330B5.bc | FileCheck %s --check-prefix CHECK-7
// CHECK-7: <BLOCKINFO_BLOCK/>
// CHECK-7-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-7-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-7-NEXT: </VersionBlock>
-// CHECK-7-NEXT: <FunctionBlock NumWords=44 BlockCodeSize=4>
-// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1=222 op2=180 op3=172 op4=28 op5=217 op6=37 op7=60 op8=217 op9=239 op10=127 op11=190 op12=107 op13=202 op14=197 op15=6 op16=215 op17=121 op18=132 op19=171 op20=212/>
-// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-7-NEXT: <RecordBlock NumWords=37 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
+// CHECK-7-NEXT: <DefLocation abbrevid=6 op0=36 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <TagType abbrevid=8 op0=3/>
// CHECK-7-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
// CHECK-7-NEXT: </ReferenceBlock>
-// CHECK-7-NEXT: <IsMethod abbrevid=9 op0=1/>
-// CHECK-7-NEXT: <DefLocation abbrevid=6 op0=27 op1=4/> blob data = '{{.*}}'
// CHECK-7-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=3/>
// CHECK-7-NEXT: </ReferenceBlock>
-// CHECK-7-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-7-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-7-NEXT: </ReferenceBlock>
-// CHECK-7-NEXT: </TypeBlock>
-// CHECK-7-NEXT: </FunctionBlock>
+// CHECK-7-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/641AB4A3D36399954ACDE29C7A8833032BF40472.bc | FileCheck %s --check-prefix CHECK-8
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/ACE81AFA6627B4CEF2B456FB6E1252925674AF7E.bc | FileCheck %s --check-prefix CHECK-8
// CHECK-8: <BLOCKINFO_BLOCK/>
// CHECK-8-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-8-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-8-NEXT: </VersionBlock>
-// CHECK-8-NEXT: <RecordBlock NumWords=24 BlockCodeSize=4>
-// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1=100 op2=26 op3=180 op4=163 op5=211 op6=99 op7=153 op8=149 op9=74 op10=205 op11=226 op12=156 op13=122 op14=136 op15=51 op16=3 op17=43 op18=244 op19=4 op20=114/>
-// CHECK-8-NEXT: <Name abbrevid=5 op0=1/> blob data = 'Y'
-// CHECK-8-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1=202 op2=124 op3=121 op4=53 op5=115 op6=11 op7=94 op8=172 op9=210 op10=95 op11=8 op12=14 op13=156 op14=131 op15=250 op16=8 op17=124 op18=205 op19=199 op20=94/>
-// CHECK-8-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
-// CHECK-8-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-8-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-8-NEXT: </ReferenceBlock>
-// CHECK-8-NEXT: <DefLocation abbrevid=6 op0=39 op1=4/> blob data = '{{.*}}'
-// CHECK-8-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-8-NEXT: <RecordBlock NumWords=33 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-8-NEXT: <DefLocation abbrevid=6 op0=15 op1=4/> blob data = '{{.*}}'
+// CHECK-8-NEXT: <TagType abbrevid=8 op0=2/>
+// CHECK-8-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Name abbrevid=4 op0=1/> blob data = 'X'
+// CHECK-8-NEXT: <Access abbrevid=5 op0=3/>
+// CHECK-8-NEXT: </MemberTypeBlock>
+// CHECK-8-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Name abbrevid=4 op0=1/> blob data = 'Y'
+// CHECK-8-NEXT: <Access abbrevid=5 op0=3/>
+// CHECK-8-NEXT: </MemberTypeBlock>
// CHECK-8-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/FC07BD34D5E77782C263FA944447929EA8753740.bc | FileCheck %s --check-prefix CHECK-9
-// CHECK-9: <BLOCKINFO_BLOCK/>
-// CHECK-9-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-9-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-9-NEXT: </VersionBlock>
-// CHECK-9-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
-// CHECK-9-NEXT: <USR abbrevid=4 op0=20 op1=252 op2=7 op3=189 op4=52 op5=213 op6=231 op7=119 op8=130 op9=194 op10=99 op11=250 op12=148 op13=68 op14=71 op15=146 op16=158 op17=168 op18=117 op19=55 op20=64/>
-// CHECK-9-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-9-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
-// CHECK-9-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
-// CHECK-9-NEXT: <Member abbrevid=8 op0=1/> blob data = 'Y'
-// CHECK-9-NEXT: </EnumBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/0921737541208B8FA9BB42B60F78AC1D779AA054.bc | FileCheck %s --check-prefix CHECK-10
-// CHECK-10: <BLOCKINFO_BLOCK/>
-// CHECK-10-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-10-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-10-NEXT: </VersionBlock>
-// CHECK-10-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
-// CHECK-10-NEXT: <USR abbrevid=4 op0=20 op1=9 op2=33 op3=115 op4=117 op5=65 op6=32 op7=139 op8=143 op9=169 op10=187 op11=66 op12=182 op13=15 op14=120 op15=172 op16=29 op17=119 op18=154 op19=160 op20=84/>
-// CHECK-10-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
-// CHECK-10-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
-// CHECK-10-NEXT: <TagType abbrevid=8 op0=3/>
-// CHECK-10-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/E3B54702FABFF4037025BA194FC27C47006330B5.bc | FileCheck %s --check-prefix CHECK-11
-// CHECK-11: <BLOCKINFO_BLOCK/>
-// CHECK-11-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-11-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-11-NEXT: </VersionBlock>
-// CHECK-11-NEXT: <RecordBlock NumWords=37 BlockCodeSize=4>
-// CHECK-11-NEXT: <USR abbrevid=4 op0=20 op1=227 op2=181 op3=71 op4=2 op5=250 op6=191 op7=244 op8=3 op9=112 op10=37 op11=186 op12=25 op13=79 op14=194 op15=124 op16=71 op17=0 op18=99 op19=48 op20=181/>
-// CHECK-11-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
-// CHECK-11-NEXT: <DefLocation abbrevid=6 op0=36 op1=4/> blob data = '{{.*}}'
-// CHECK-11-NEXT: <TagType abbrevid=8 op0=3/>
-// CHECK-11-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-11-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-11-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-11-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-11-NEXT: <Field abbrevid=7 op0=2/>
-// CHECK-11-NEXT: </ReferenceBlock>
-// CHECK-11-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-11-NEXT: <USR abbrevid=4 op0=20 op1=9 op2=33 op3=115 op4=117 op5=65 op6=32 op7=139 op8=143 op9=169 op10=187 op11=66 op12=182 op13=15 op14=120 op15=172 op16=29 op17=119 op18=154 op19=160 op20=84/>
-// CHECK-11-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
-// CHECK-11-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-11-NEXT: <Field abbrevid=7 op0=3/>
-// CHECK-11-NEXT: </ReferenceBlock>
-// CHECK-11-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/ACE81AFA6627B4CEF2B456FB6E1252925674AF7E.bc | FileCheck %s --check-prefix CHECK-12
-// CHECK-12: <BLOCKINFO_BLOCK/>
-// CHECK-12-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-12-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-12-NEXT: </VersionBlock>
-// CHECK-12-NEXT: <RecordBlock NumWords=33 BlockCodeSize=4>
-// CHECK-12-NEXT: <USR abbrevid=4 op0=20 op1=172 op2=232 op3=26 op4=250 op5=102 op6=39 op7=180 op8=206 op9=242 op10=180 op11=86 op12=251 op13=110 op14=18 op15=82 op16=146 op17=86 op18=116 op19=175 op20=126/>
-// CHECK-12-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-12-NEXT: <DefLocation abbrevid=6 op0=15 op1=4/> blob data = '{{.*}}'
-// CHECK-12-NEXT: <TagType abbrevid=8 op0=2/>
-// CHECK-12-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-12-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-12-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-12-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-12-NEXT: </ReferenceBlock>
-// CHECK-12-NEXT: <Name abbrevid=4 op0=1/> blob data = 'X'
-// CHECK-12-NEXT: <Access abbrevid=5 op0=3/>
-// CHECK-12-NEXT: </MemberTypeBlock>
-// CHECK-12-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-12-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-12-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-12-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-12-NEXT: </ReferenceBlock>
-// CHECK-12-NEXT: <Name abbrevid=4 op0=1/> blob data = 'Y'
-// CHECK-12-NEXT: <Access abbrevid=5 op0=3/>
-// CHECK-12-NEXT: </MemberTypeBlock>
-// CHECK-12-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/1E3438A08BA22025C0B46289FF0686F92C8924C5.bc | FileCheck %s --check-prefix CHECK-13
-// CHECK-13: <BLOCKINFO_BLOCK/>
-// CHECK-13-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-13-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-13-NEXT: </VersionBlock>
-// CHECK-13-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
-// CHECK-13-NEXT: <USR abbrevid=4 op0=20 op1=30 op2=52 op3=56 op4=160 op5=139 op6=162 op7=32 op8=37 op9=192 op10=180 op11=98 op12=137 op13=255 op14=6 op15=134 op16=249 op17=44 op18=137 op19=36 op20=197/>
-// CHECK-13-NEXT: <Name abbrevid=5 op0=2/> blob data = 'Bc'
-// CHECK-13-NEXT: <DefLocation abbrevid=6 op0=19 op1=4/> blob data = '{{.*}}'
-// CHECK-13-NEXT: <Scoped abbrevid=9 op0=1/>
-// CHECK-13-NEXT: <Member abbrevid=8 op0=1/> blob data = 'A'
-// CHECK-13-NEXT: <Member abbrevid=8 op0=1/> blob data = 'B'
-// CHECK-13-NEXT: </EnumBlock>
diff --git a/clang-tools-extra/test/clang-doc/mapper-comment.cpp b/clang-tools-extra/test/clang-doc/mapper-comment.cpp
index da691b15632..efd3dc54c1d 100644
--- a/clang-tools-extra/test/clang-doc/mapper-comment.cpp
+++ b/clang-tools-extra/test/clang-doc/mapper-comment.cpp
@@ -27,46 +27,48 @@ void F(int I, int J);
/// Bonus comment on definition
void F(int I, int J) {}
-// RUN: clang-doc --dump-mapper --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --dump-mapper --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/7574630614A535710E5A6ABCFFF98BCA2D06A4CA.bc | FileCheck %s --check-prefix CHECK-0
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-0
// CHECK-0: <BLOCKINFO_BLOCK/>
// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-0-NEXT: </VersionBlock>
-// CHECK-0-NEXT: <FunctionBlock NumWords=70 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=117 op2=116 op3=99 op4=6 op5=20 op6=165 op7=53 op8=113 op9=14 op10=90 op11=106 op12=188 op13=255 op14=249 op15=139 op16=202 op17=45 op18=6 op19=164 op20=202/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
-// CHECK-0-NEXT: <CommentBlock NumWords=28 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'FullComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=21 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
-// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
-// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
-// CHECK-0-NEXT: <Text abbrevid=5 op0=28/> blob data = ' Bonus comment on definition'
+// CHECK-0-NEXT: <NamespaceBlock NumWords=73 BlockCodeSize=4>
+// CHECK-0-NEXT: <FunctionBlock NumWords=70 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
+// CHECK-0-NEXT: <CommentBlock NumWords=28 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'FullComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=21 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=16/> blob data = 'ParagraphComment'
+// CHECK-0-NEXT: <CommentBlock NumWords=13 BlockCodeSize=4>
+// CHECK-0-NEXT: <Kind abbrevid=4 op0=11/> blob data = 'TextComment'
+// CHECK-0-NEXT: <Text abbrevid=5 op0=28/> blob data = ' Bonus comment on definition'
+// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: </CommentBlock>
-// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: </TypeBlock>
-// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'I'
-// CHECK-0-NEXT: </FieldTypeBlock>
-// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'J'
-// CHECK-0-NEXT: </FieldTypeBlock>
-// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'I'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'J'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/mapper-linkage.cpp b/clang-tools-extra/test/clang-doc/mapper-linkage.cpp
new file mode 100644
index 00000000000..5b4fe7df36f
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/mapper-linkage.cpp
@@ -0,0 +1,402 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// REQUIRES: system-linux
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+void function(int x);
+
+inline int inlinedFunction(int x);
+
+int functionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+inline int inlinedFunctionWithInnerClass(int x) {
+ class InnerClass { //VisibleNoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+class Class {
+public:
+ void publicMethod();
+ int publicField;
+
+protected:
+ void protectedMethod();
+ int protectedField;
+
+private:
+ void privateMethod();
+ int privateField;
+};
+
+namespace named {
+class NamedClass {
+public:
+ void namedPublicMethod();
+ int namedPublicField;
+
+protected:
+ void namedProtectedMethod();
+ int namedProtectedField;
+
+private:
+ void namedPrivateMethod();
+ int namedPrivateField;
+};
+
+void namedFunction();
+static void namedStaticFunction();
+inline void namedInlineFunction();
+} // namespace named
+
+static void staticFunction(int x); //Internal Linkage
+
+static int staticFunctionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+namespace {
+class AnonClass {
+public:
+ void anonPublicMethod();
+ int anonPublicField;
+
+protected:
+ void anonProtectedMethod();
+ int anonProtectedField;
+
+private:
+ void anonPrivateMethod();
+ int anonPrivateField;
+};
+
+void anonFunction();
+static void anonStaticFunction();
+inline void anonInlineFunction();
+} // namespace
+
+// RUN: clang-doc --dump-mapper --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/C9B3B71ACDD84C5BB320D34E97677715CDB3EA32.bc | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: <BLOCKINFO_BLOCK/>
+// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-0-NEXT: </VersionBlock>
+// CHECK-0-NEXT: <RecordBlock NumWords=79 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <FunctionBlock NumWords=71 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=17/> blob data = 'innerPublicMethod'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=17 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=29/> blob data = 'inlinedFunctionWithInnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=26 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/8960B5C9247D6F5C532756E53A1AD1240FA2146F.bc | FileCheck %s --check-prefix CHECK-1
+// CHECK-1: <BLOCKINFO_BLOCK/>
+// CHECK-1-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-1-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-1-NEXT: </VersionBlock>
+// CHECK-1-NEXT: <NamespaceBlock NumWords=45 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <FunctionBlock NumWords=37 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=19/> blob data = 'namedInlineFunction'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <Location abbrevid=7 op0=63 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: </TypeBlock>
+// CHECK-1-NEXT: </FunctionBlock>
+// CHECK-1-NEXT: </NamespaceBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/74A031CBE68C101F3E83F60ED17F20C11EC19D48.bc | FileCheck %s --check-prefix CHECK-2
+// CHECK-2: <BLOCKINFO_BLOCK/>
+// CHECK-2-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-2-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-2-NEXT: </VersionBlock>
+// CHECK-2-NEXT: <RecordBlock NumWords=78 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <FunctionBlock NumWords=70 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=17/> blob data = 'innerPublicMethod'
+// CHECK-2-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <ReferenceBlock NumWords=16 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=28/> blob data = 'staticFunctionWithInnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=71 op1=4/> blob data = '{{.*}}'
+// CHECK-2-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-2-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-2-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-2-NEXT: </ReferenceBlock>
+// CHECK-2-NEXT: </TypeBlock>
+// CHECK-2-NEXT: </FunctionBlock>
+// CHECK-2-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/7CDD73DCD6CD72F7E5CE25502810A182C66C4B45.bc | FileCheck %s --check-prefix CHECK-3
+// CHECK-3: <BLOCKINFO_BLOCK/>
+// CHECK-3-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-3-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-3-NEXT: </VersionBlock>
+// CHECK-3-NEXT: <RecordBlock NumWords=57 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <FunctionBlock NumWords=49 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=13/> blob data = 'privateMethod'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-3-NEXT: <Location abbrevid=7 op0=42 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=5/> blob data = 'Class'
+// CHECK-3-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-3-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: </TypeBlock>
+// CHECK-3-NEXT: </FunctionBlock>
+// CHECK-3-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/85427901413EC77C961019EBB3ADEF7B0BAAFE78.bc | FileCheck %s --check-prefix CHECK-4
+// CHECK-4: <BLOCKINFO_BLOCK/>
+// CHECK-4-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-4-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-4-NEXT: </VersionBlock>
+// CHECK-4-NEXT: <RecordBlock NumWords=77 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <FunctionBlock NumWords=69 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=17/> blob data = 'innerPublicMethod'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <ReferenceBlock NumWords=15 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=22/> blob data = 'functionWithInnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=3/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=10/> blob data = 'InnerClass'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-4-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-4-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: </TypeBlock>
+// CHECK-4-NEXT: </FunctionBlock>
+// CHECK-4-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-5
+// CHECK-5: <BLOCKINFO_BLOCK/>
+// CHECK-5-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-5-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-5-NEXT: </VersionBlock>
+// CHECK-5-NEXT: <NamespaceBlock NumWords=39 BlockCodeSize=4>
+// CHECK-5-NEXT: <FunctionBlock NumWords=36 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=28/> blob data = 'staticFunctionWithInnerClass'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=68 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: </TypeBlock>
+// CHECK-5-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-5-NEXT: </ReferenceBlock>
+// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'x'
+// CHECK-5-NEXT: </FieldTypeBlock>
+// CHECK-5-NEXT: </FunctionBlock>
+// CHECK-5-NEXT: </NamespaceBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/4712C5FA37B298A25501D1033C619B65B0ECC449.bc | FileCheck %s --check-prefix CHECK-6
+// CHECK-6: <BLOCKINFO_BLOCK/>
+// CHECK-6-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-6-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-6-NEXT: </VersionBlock>
+// CHECK-6-NEXT: <RecordBlock NumWords=73 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <FunctionBlock NumWords=65 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=18/> blob data = 'namedPrivateMethod'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=11 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=5/> blob data = 'named'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-6-NEXT: <Location abbrevid=7 op0=57 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=10/> blob data = 'NamedClass'
+// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-6-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-6-NEXT: </ReferenceBlock>
+// CHECK-6-NEXT: </TypeBlock>
+// CHECK-6-NEXT: </FunctionBlock>
+// CHECK-6-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/6E8FB72A89761E77020BFCEE9A9A6E64B15CC2A9.bc | FileCheck %s --check-prefix CHECK-7
+// CHECK-7: <BLOCKINFO_BLOCK/>
+// CHECK-7-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-7-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-7-NEXT: </VersionBlock>
+// CHECK-7-NEXT: <RecordBlock NumWords=69 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <FunctionBlock NumWords=61 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=17/> blob data = 'anonPrivateMethod'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-7-NEXT: <Location abbrevid=7 op0=88 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <ReferenceBlock NumWords=12 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=9/> blob data = 'AnonClass'
+// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-7-NEXT: </ReferenceBlock>
+// CHECK-7-NEXT: </TypeBlock>
+// CHECK-7-NEXT: </FunctionBlock>
+// CHECK-7-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/83CC52D32583E0771710A7742DE81C839E953AC8.bc | FileCheck %s --check-prefix CHECK-8
+// CHECK-8: <BLOCKINFO_BLOCK/>
+// CHECK-8-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-8-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-8-NEXT: </VersionBlock>
+// CHECK-8-NEXT: <NamespaceBlock NumWords=41 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <FunctionBlock NumWords=33 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=18/> blob data = 'anonInlineFunction'
+// CHECK-8-NEXT: <ReferenceBlock NumWords=7 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-8-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Location abbrevid=7 op0=94 op1=4/> blob data = '{{.*}}'
+// CHECK-8-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: </TypeBlock>
+// CHECK-8-NEXT: </FunctionBlock>
+// CHECK-8-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/mapper-module.cpp b/clang-tools-extra/test/clang-doc/mapper-module.cpp
new file mode 100644
index 00000000000..04a34c68d15
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/mapper-module.cpp
@@ -0,0 +1,51 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+export module M;
+
+int moduleFunction(int x); // ModuleLinkage
+
+static int staticModuleFunction(int x); // ModuleInternalLinkage
+
+export double exportedModuleFunction(double y, int z); // ExternalLinkage
+
+// RUN: clang-doc --dump-mapper --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: <BLOCKINFO_BLOCK/>
+// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
+// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
+// CHECK-0-NEXT: </VersionBlock>
+// CHECK-0-NEXT: <NamespaceBlock NumWords=50 BlockCodeSize=4>
+// CHECK-0-NEXT: <FunctionBlock NumWords=47 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=22/> blob data = 'exportedModuleFunction'
+// CHECK-0-NEXT: <Location abbrevid=7 op0=15 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=7 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=4 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=6/> blob data = 'double'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=9 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=4 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=6/> blob data = 'double'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'y'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <Name abbrevid=4 op0=1/> blob data = 'z'
+// CHECK-0-NEXT: </FieldTypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/mapper-namespace.cpp b/clang-tools-extra/test/clang-doc/mapper-namespace.cpp
index aeda90816c6..d000823312b 100644
--- a/clang-tools-extra/test/clang-doc/mapper-namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/mapper-namespace.cpp
@@ -25,114 +25,70 @@ E func(int i) { return X; }
} // namespace B
} // namespace A
-// RUN: clang-doc --dump-mapper --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --dump-mapper --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/E9ABF7E7E2425B626723D41E76E4BC7E7A5BD775.bc | FileCheck %s --check-prefix CHECK-0
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/8D042EFFC98B373450BC6B5B90A330C25A150E9C.bc | FileCheck %s --check-prefix CHECK-0
// CHECK-0: <BLOCKINFO_BLOCK/>
// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-0-NEXT: </VersionBlock>
-// CHECK-0-NEXT: <EnumBlock NumWords=38 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=233 op2=171 op3=247 op4=231 op5=226 op6=66 op7=91 op8=98 op9=103 op10=35 op11=212 op12=30 op13=118 op14=228 op15=188 op16=126 op17=122 op18=91 op19=215 op20=117/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=226 op2=26 op3=247 op4=158 op5=42 op6=157 op7=2 op8=85 op9=75 op10=160 op11=144 op12=209 op13=13 op14=243 op15=159 op16=226 op17=115 op18=245 op19=205 op20=181/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-0-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-0-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-0-NEXT: </ReferenceBlock>
-// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
-// CHECK-0-NEXT: </EnumBlock>
+// CHECK-0-NEXT: <NamespaceBlock NumWords=40 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <FunctionBlock NumWords=32 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'f'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
+// CHECK-0-NEXT: </NamespaceBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/39D3C95A5F7CE2BA4937BD7B01BAE09EBC2AD8AC.bc | FileCheck %s --check-prefix CHECK-1
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/E21AF79E2A9D02554BA090D10DF39FE273F5CDB5.bc | FileCheck %s --check-prefix CHECK-1
// CHECK-1: <BLOCKINFO_BLOCK/>
// CHECK-1-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-1-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-1-NEXT: </VersionBlock>
-// CHECK-1-NEXT: <FunctionBlock NumWords=32 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=57 op2=211 op3=201 op4=90 op5=95 op6=124 op7=226 op8=186 op9=73 op10=55 op11=189 op12=123 op13=1 op14=186 op15=224 op16=158 op17=188 op18=42 op19=216 op20=172/>
-// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'f'
-// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-1-NEXT: </ReferenceBlock>
-// CHECK-1-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
-// CHECK-1-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: <NamespaceBlock NumWords=64 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <FunctionBlock NumWords=56 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=4/> blob data = 'func'
+// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
// CHECK-1-NEXT: </ReferenceBlock>
-// CHECK-1-NEXT: </TypeBlock>
-// CHECK-1-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/9A82CB33ED0FDF81EE383D31CD0957D153C5E840.bc | FileCheck %s --check-prefix CHECK-2
-// CHECK-2: <BLOCKINFO_BLOCK/>
-// CHECK-2-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-2-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-2-NEXT: </VersionBlock>
-// CHECK-2-NEXT: <FunctionBlock NumWords=56 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=154 op2=130 op3=203 op4=51 op5=237 op6=15 op7=223 op8=129 op9=238 op10=56 op11=61 op12=49 op13=205 op14=9 op15=87 op16=209 op17=83 op18=197 op19=232 op20=64/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=4/> blob data = 'func'
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=226 op2=26 op3=247 op4=158 op5=42 op6=157 op7=2 op8=85 op9=75 op10=160 op11=144 op12=209 op13=13 op14=243 op15=159 op16=226 op17=115 op18=245 op19=205 op20=181/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
-// CHECK-2-NEXT: <TypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=5 BlockCodeSize=4>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=12/> blob data = 'enum A::B::E'
-// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: </TypeBlock>
-// CHECK-2-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
-// CHECK-2-NEXT: </FieldTypeBlock>
-// CHECK-2-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/8D042EFFC98B373450BC6B5B90A330C25A150E9C.bc | FileCheck %s --check-prefix CHECK-3
-// CHECK-3: <BLOCKINFO_BLOCK/>
-// CHECK-3-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-3-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-3-NEXT: </VersionBlock>
-// CHECK-3-NEXT: <NamespaceBlock NumWords=9 BlockCodeSize=4>
-// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-3-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-3-NEXT: </NamespaceBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/E21AF79E2A9D02554BA090D10DF39FE273F5CDB5.bc | FileCheck %s --check-prefix CHECK-4
-// CHECK-4: <BLOCKINFO_BLOCK/>
-// CHECK-4-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-4-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-4-NEXT: </VersionBlock>
-// CHECK-4-NEXT: <NamespaceBlock NumWords=21 BlockCodeSize=4>
-// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1=226 op2=26 op3=247 op4=158 op5=42 op6=157 op7=2 op8=85 op9=75 op10=160 op11=144 op12=209 op13=13 op14=243 op15=159 op16=226 op17=115 op18=245 op19=205 op20=181/>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-4-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-4-NEXT: <RefType abbrevid=6 op0=1/>
-// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-4-NEXT: </ReferenceBlock>
-// CHECK-4-NEXT: </NamespaceBlock>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-1-NEXT: <RefType abbrevid=6 op0=1/>
+// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
+// CHECK-1-NEXT: <TypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=5 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=12/> blob data = 'enum A::B::E'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: </TypeBlock>
+// CHECK-1-NEXT: <FieldTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-1-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-1-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-1-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-1-NEXT: </ReferenceBlock>
+// CHECK-1-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
+// CHECK-1-NEXT: </FieldTypeBlock>
+// CHECK-1-NEXT: </FunctionBlock>
+// CHECK-1-NEXT: </NamespaceBlock>
diff --git a/clang-tools-extra/test/clang-doc/mapper-record.cpp b/clang-tools-extra/test/clang-doc/mapper-record.cpp
index 82a5e2f018d..dbabd8fdd71 100644
--- a/clang-tools-extra/test/clang-doc/mapper-record.cpp
+++ b/clang-tools-extra/test/clang-doc/mapper-record.cpp
@@ -39,7 +39,7 @@ class X {
class Y {};
};
-// RUN: clang-doc --dump-mapper --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --dump-mapper --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
// RUN: llvm-bcanalyzer --dump %t/docs/bc/289584A8E0FF4178A794622A547AA622503967A1.bc | FileCheck %s --check-prefix CHECK-0
@@ -47,11 +47,32 @@ class X {
// CHECK-0-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-0-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-0-NEXT: </VersionBlock>
-// CHECK-0-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
-// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=25 op1=4/> blob data = '{{.*}}'
-// CHECK-0-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-0-NEXT: <RecordBlock NumWords=55 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <FunctionBlock NumWords=47 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=15/> blob data = 'ProtectedMethod'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <IsMethod abbrevid=9 op0=1/>
+// CHECK-0-NEXT: <DefLocation abbrevid=6 op0=34 op1=4/> blob data = '{{.*}}'
+// CHECK-0-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-0-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-0-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-0-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
+// CHECK-0-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-0-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+// CHECK-0-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-0-NEXT: </ReferenceBlock>
+// CHECK-0-NEXT: </TypeBlock>
+// CHECK-0-NEXT: </FunctionBlock>
// CHECK-0-NEXT: </RecordBlock>
// RUN: llvm-bcanalyzer --dump %t/docs/bc/3FB542274573CAEAD54CEBFFCAEE3D77FB9713D8.bc | FileCheck %s --check-prefix CHECK-1
@@ -60,10 +81,10 @@ class X {
// CHECK-1-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-1-NEXT: </VersionBlock>
// CHECK-1-NEXT: <RecordBlock NumWords=24 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=63 op2=181 op3=66 op4=39 op5=69 op6=115 op7=202 op8=234 op9=213 op10=76 op11=235 op12=255 op13=202 op14=238 op15=61 op16=119 op17=251 op18=151 op19=19 op20=216/>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'I'
// CHECK-1-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1=182 op2=172 op3=76 op4=92 op5=159 op6=46 op7=163 op8=242 op9=179 op10=236 op11=225 op12=163 op13=61 op14=52 op15=159 op16=78 op17=229 op18=2 op19=178 op20=78/>
+// CHECK-1-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-1-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
// CHECK-1-NEXT: <RefType abbrevid=6 op0=3/>
// CHECK-1-NEXT: <Field abbrevid=7 op0=1/>
@@ -72,246 +93,128 @@ class X {
// CHECK-1-NEXT: <TagType abbrevid=8 op0=3/>
// CHECK-1-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/5093D428CDC62096A67547BA52566E4FB9404EEE.bc | FileCheck %s --check-prefix CHECK-2
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/CA7C7935730B5EACD25F080E9C83FA087CCDC75E.bc | FileCheck %s --check-prefix CHECK-2
// CHECK-2: <BLOCKINFO_BLOCK/>
// CHECK-2-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-2-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-2-NEXT: </VersionBlock>
-// CHECK-2-NEXT: <FunctionBlock NumWords=47 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=80 op2=147 op3=212 op4=40 op5=205 op6=198 op7=32 op8=150 op9=166 op10=117 op11=71 op12=186 op13=82 op14=86 op15=110 op16=79 op17=185 op18=64 op19=78 op20=238/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=15/> blob data = 'ProtectedMethod'
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <IsMethod abbrevid=9 op0=1/>
-// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=34 op1=4/> blob data = '{{.*}}'
-// CHECK-2-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-2-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-2-NEXT: <Field abbrevid=7 op0=2/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-2-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-2-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-2-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-2-NEXT: </ReferenceBlock>
-// CHECK-2-NEXT: </TypeBlock>
-// CHECK-2-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/CA7C7935730B5EACD25F080E9C83FA087CCDC75E.bc | FileCheck %s --check-prefix CHECK-3
+// CHECK-2-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
+// CHECK-2-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-2-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
+// CHECK-2-NEXT: <DefLocation abbrevid=6 op0=38 op1=4/> blob data = '{{.*}}'
+// CHECK-2-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-2-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/06B5F6A19BA9F6A832E127C9968282B94619B210.bc | FileCheck %s --check-prefix CHECK-3
// CHECK-3: <BLOCKINFO_BLOCK/>
// CHECK-3-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-3-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-3-NEXT: </VersionBlock>
-// CHECK-3-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
-// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1=202 op2=124 op3=121 op4=53 op5=115 op6=11 op7=94 op8=172 op9=210 op10=95 op11=8 op12=14 op13=156 op14=131 op15=250 op16=8 op17=124 op18=205 op19=199 op20=94/>
-// CHECK-3-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
-// CHECK-3-NEXT: <DefLocation abbrevid=6 op0=38 op1=4/> blob data = '{{.*}}'
-// CHECK-3-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-3-NEXT: <RecordBlock NumWords=22 BlockCodeSize=4>
+// CHECK-3-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=1/> blob data = 'C'
+// CHECK-3-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
+// CHECK-3-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-3-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-3-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-3-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-3-NEXT: </ReferenceBlock>
+// CHECK-3-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
+// CHECK-3-NEXT: </MemberTypeBlock>
// CHECK-3-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/B6AC4C5C9F2EA3F2B3ECE1A33D349F4EE502B24E.bc | FileCheck %s --check-prefix CHECK-4
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/641AB4A3D36399954ACDE29C7A8833032BF40472.bc | FileCheck %s --check-prefix CHECK-4
// CHECK-4: <BLOCKINFO_BLOCK/>
// CHECK-4-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-4-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-4-NEXT: </VersionBlock>
-// CHECK-4-NEXT: <FunctionBlock NumWords=20 BlockCodeSize=4>
-// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1=182 op2=172 op3=76 op4=92 op5=159 op6=46 op7=163 op8=242 op9=179 op10=236 op11=225 op12=163 op13=61 op14=52 op15=159 op16=78 op17=229 op18=2 op19=178 op20=78/>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
-// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=11 op1=4/> blob data = '{{.*}}'
-// CHECK-4-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-4-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-4-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-4-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-4-NEXT: </ReferenceBlock>
-// CHECK-4-NEXT: </TypeBlock>
-// CHECK-4-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/06B5F6A19BA9F6A832E127C9968282B94619B210.bc | FileCheck %s --check-prefix CHECK-5
+// CHECK-4-NEXT: <RecordBlock NumWords=24 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'Y'
+// CHECK-4-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+// CHECK-4-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-4-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
+// CHECK-4-NEXT: <RefType abbrevid=6 op0=2/>
+// CHECK-4-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-4-NEXT: </ReferenceBlock>
+// CHECK-4-NEXT: <DefLocation abbrevid=6 op0=39 op1=4/> blob data = '{{.*}}'
+// CHECK-4-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-4-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0000000000000000000000000000000000000000.bc | FileCheck %s --check-prefix CHECK-5
// CHECK-5: <BLOCKINFO_BLOCK/>
// CHECK-5-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-5-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-5-NEXT: </VersionBlock>
-// CHECK-5-NEXT: <RecordBlock NumWords=22 BlockCodeSize=4>
-// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1=6 op2=181 op3=246 op4=161 op5=155 op6=169 op7=246 op8=168 op9=50 op10=225 op11=39 op12=201 op13=150 op14=130 op15=130 op16=185 op17=70 op18=25 op19=178 op20=16/>
-// CHECK-5-NEXT: <Name abbrevid=5 op0=1/> blob data = 'C'
-// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=21 op1=4/> blob data = '{{.*}}'
-// CHECK-5-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-5-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-5-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-5-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-5-NEXT: </ReferenceBlock>
-// CHECK-5-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
-// CHECK-5-NEXT: </MemberTypeBlock>
-// CHECK-5-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/BD2BDEBD423F80BACCEA75DE6D6622D355FC2D17.bc | FileCheck %s --check-prefix CHECK-6
+// CHECK-5-NEXT: <NamespaceBlock NumWords=19 BlockCodeSize=4>
+// CHECK-5-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
+// CHECK-5-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-5-NEXT: <Name abbrevid=5 op0=2/> blob data = 'Bc'
+// CHECK-5-NEXT: <DefLocation abbrevid=6 op0=19 op1=4/> blob data = '{{.*}}'
+// CHECK-5-NEXT: <Scoped abbrevid=9 op0=1/>
+// CHECK-5-NEXT: <Member abbrevid=8 op0=1/> blob data = 'A'
+// CHECK-5-NEXT: <Member abbrevid=8 op0=1/> blob data = 'B'
+// CHECK-5-NEXT: </EnumBlock>
+// CHECK-5-NEXT: </NamespaceBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/0921737541208B8FA9BB42B60F78AC1D779AA054.bc | FileCheck %s --check-prefix CHECK-6
// CHECK-6: <BLOCKINFO_BLOCK/>
// CHECK-6-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-6-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-6-NEXT: </VersionBlock>
-// CHECK-6-NEXT: <FunctionBlock NumWords=44 BlockCodeSize=4>
-// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1=189 op2=43 op3=222 op4=189 op5=66 op6=63 op7=128 op8=186 op9=204 op10=234 op11=117 op12=222 op13=109 op14=102 op15=34 op16=211 op17=85 op18=252 op19=45 op20=23/>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=2/> blob data = '~E'
-// CHECK-6-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-6-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-6-NEXT: </ReferenceBlock>
-// CHECK-6-NEXT: <IsMethod abbrevid=9 op0=1/>
-// CHECK-6-NEXT: <DefLocation abbrevid=6 op0=28 op1=4/> blob data = '{{.*}}'
-// CHECK-6-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-6-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-6-NEXT: <Field abbrevid=7 op0=2/>
-// CHECK-6-NEXT: </ReferenceBlock>
-// CHECK-6-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-6-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-6-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-6-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-6-NEXT: </ReferenceBlock>
-// CHECK-6-NEXT: </TypeBlock>
-// CHECK-6-NEXT: </FunctionBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/DEB4AC1CD9253CD9EF7FBE6BCAC506D77984ABD4.bc | FileCheck %s --check-prefix CHECK-7
+// CHECK-6-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
+// CHECK-6-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-6-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
+// CHECK-6-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
+// CHECK-6-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-6-NEXT: </RecordBlock>
+
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/E3B54702FABFF4037025BA194FC27C47006330B5.bc | FileCheck %s --check-prefix CHECK-7
// CHECK-7: <BLOCKINFO_BLOCK/>
// CHECK-7-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-7-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-7-NEXT: </VersionBlock>
-// CHECK-7-NEXT: <FunctionBlock NumWords=44 BlockCodeSize=4>
-// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1=222 op2=180 op3=172 op4=28 op5=217 op6=37 op7=60 op8=217 op9=239 op10=127 op11=190 op12=107 op13=202 op14=197 op15=6 op16=215 op17=121 op18=132 op19=171 op20=212/>
-// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-7-NEXT: <RecordBlock NumWords=37 BlockCodeSize=4>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
+// CHECK-7-NEXT: <DefLocation abbrevid=6 op0=36 op1=4/> blob data = '{{.*}}'
+// CHECK-7-NEXT: <TagType abbrevid=8 op0=3/>
// CHECK-7-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-7-NEXT: <Field abbrevid=7 op0=1/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
// CHECK-7-NEXT: </ReferenceBlock>
-// CHECK-7-NEXT: <IsMethod abbrevid=9 op0=1/>
-// CHECK-7-NEXT: <DefLocation abbrevid=6 op0=27 op1=4/> blob data = '{{.*}}'
// CHECK-7-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
+// CHECK-7-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-7-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
// CHECK-7-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-7-NEXT: <Field abbrevid=7 op0=2/>
+// CHECK-7-NEXT: <Field abbrevid=7 op0=3/>
// CHECK-7-NEXT: </ReferenceBlock>
-// CHECK-7-NEXT: <TypeBlock NumWords=6 BlockCodeSize=4>
-// CHECK-7-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-7-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
-// CHECK-7-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-7-NEXT: </ReferenceBlock>
-// CHECK-7-NEXT: </TypeBlock>
-// CHECK-7-NEXT: </FunctionBlock>
+// CHECK-7-NEXT: </RecordBlock>
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/641AB4A3D36399954ACDE29C7A8833032BF40472.bc | FileCheck %s --check-prefix CHECK-8
+// RUN: llvm-bcanalyzer --dump %t/docs/bc/ACE81AFA6627B4CEF2B456FB6E1252925674AF7E.bc | FileCheck %s --check-prefix CHECK-8
// CHECK-8: <BLOCKINFO_BLOCK/>
// CHECK-8-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
// CHECK-8-NEXT: <Version abbrevid=4 op0=2/>
// CHECK-8-NEXT: </VersionBlock>
-// CHECK-8-NEXT: <RecordBlock NumWords=24 BlockCodeSize=4>
-// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1=100 op2=26 op3=180 op4=163 op5=211 op6=99 op7=153 op8=149 op9=74 op10=205 op11=226 op12=156 op13=122 op14=136 op15=51 op16=3 op17=43 op18=244 op19=4 op20=114/>
-// CHECK-8-NEXT: <Name abbrevid=5 op0=1/> blob data = 'Y'
-// CHECK-8-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1=202 op2=124 op3=121 op4=53 op5=115 op6=11 op7=94 op8=172 op9=210 op10=95 op11=8 op12=14 op13=156 op14=131 op15=250 op16=8 op17=124 op18=205 op19=199 op20=94/>
-// CHECK-8-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
-// CHECK-8-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-8-NEXT: <Field abbrevid=7 op0=1/>
-// CHECK-8-NEXT: </ReferenceBlock>
-// CHECK-8-NEXT: <DefLocation abbrevid=6 op0=39 op1=4/> blob data = '{{.*}}'
-// CHECK-8-NEXT: <TagType abbrevid=8 op0=3/>
+// CHECK-8-NEXT: <RecordBlock NumWords=33 BlockCodeSize=4>
+// CHECK-8-NEXT: <USR abbrevid=4 op0=20 op1={{[0-9]+}} op2={{[0-9]+}} op3={{[0-9]+}} op4={{[0-9]+}} op5={{[0-9]+}} op6={{[0-9]+}} op7={{[0-9]+}} op8={{[0-9]+}} op9={{[0-9]+}} op10={{[0-9]+}} op11={{[0-9]+}} op12={{[0-9]+}} op13={{[0-9]+}} op14={{[0-9]+}} op15={{[0-9]+}} op16={{[0-9]+}} op17={{[0-9]+}} op18={{[0-9]+}} op19={{[0-9]+}} op20={{[0-9]+}}/>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
+// CHECK-8-NEXT: <DefLocation abbrevid=6 op0=15 op1=4/> blob data = '{{.*}}'
+// CHECK-8-NEXT: <TagType abbrevid=8 op0=2/>
+// CHECK-8-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Name abbrevid=4 op0=1/> blob data = 'X'
+// CHECK-8-NEXT: </MemberTypeBlock>
+// CHECK-8-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
+// CHECK-8-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
+// CHECK-8-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+// CHECK-8-NEXT: <Field abbrevid=7 op0=4/>
+// CHECK-8-NEXT: </ReferenceBlock>
+// CHECK-8-NEXT: <Name abbrevid=4 op0=1/> blob data = 'Y'
+// CHECK-8-NEXT: </MemberTypeBlock>
// CHECK-8-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/FC07BD34D5E77782C263FA944447929EA8753740.bc | FileCheck %s --check-prefix CHECK-9
-// CHECK-9: <BLOCKINFO_BLOCK/>
-// CHECK-9-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-9-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-9-NEXT: </VersionBlock>
-// CHECK-9-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
-// CHECK-9-NEXT: <USR abbrevid=4 op0=20 op1=252 op2=7 op3=189 op4=52 op5=213 op6=231 op7=119 op8=130 op9=194 op10=99 op11=250 op12=148 op13=68 op14=71 op15=146 op16=158 op17=168 op18=117 op19=55 op20=64/>
-// CHECK-9-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-// CHECK-9-NEXT: <DefLocation abbrevid=6 op0=17 op1=4/> blob data = '{{.*}}'
-// CHECK-9-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
-// CHECK-9-NEXT: <Member abbrevid=8 op0=1/> blob data = 'Y'
-// CHECK-9-NEXT: </EnumBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/0921737541208B8FA9BB42B60F78AC1D779AA054.bc | FileCheck %s --check-prefix CHECK-10
-// CHECK-10: <BLOCKINFO_BLOCK/>
-// CHECK-10-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-10-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-10-NEXT: </VersionBlock>
-// CHECK-10-NEXT: <RecordBlock NumWords=12 BlockCodeSize=4>
-// CHECK-10-NEXT: <USR abbrevid=4 op0=20 op1=9 op2=33 op3=115 op4=117 op5=65 op6=32 op7=139 op8=143 op9=169 op10=187 op11=66 op12=182 op13=15 op14=120 op15=172 op16=29 op17=119 op18=154 op19=160 op20=84/>
-// CHECK-10-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
-// CHECK-10-NEXT: <DefLocation abbrevid=6 op0=23 op1=4/> blob data = '{{.*}}'
-// CHECK-10-NEXT: <TagType abbrevid=8 op0=3/>
-// CHECK-10-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/E3B54702FABFF4037025BA194FC27C47006330B5.bc | FileCheck %s --check-prefix CHECK-11
-// CHECK-11: <BLOCKINFO_BLOCK/>
-// CHECK-11-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-11-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-11-NEXT: </VersionBlock>
-// CHECK-11-NEXT: <RecordBlock NumWords=37 BlockCodeSize=4>
-// CHECK-11-NEXT: <USR abbrevid=4 op0=20 op1=227 op2=181 op3=71 op4=2 op5=250 op6=191 op7=244 op8=3 op9=112 op10=37 op11=186 op12=25 op13=79 op14=194 op15=124 op16=71 op17=0 op18=99 op19=48 op20=181/>
-// CHECK-11-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
-// CHECK-11-NEXT: <DefLocation abbrevid=6 op0=36 op1=4/> blob data = '{{.*}}'
-// CHECK-11-NEXT: <TagType abbrevid=8 op0=3/>
-// CHECK-11-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-11-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
-// CHECK-11-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-// CHECK-11-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-11-NEXT: <Field abbrevid=7 op0=2/>
-// CHECK-11-NEXT: </ReferenceBlock>
-// CHECK-11-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
-// CHECK-11-NEXT: <USR abbrevid=4 op0=20 op1=9 op2=33 op3=115 op4=117 op5=65 op6=32 op7=139 op8=143 op9=169 op10=187 op11=66 op12=182 op13=15 op14=120 op15=172 op16=29 op17=119 op18=154 op19=160 op20=84/>
-// CHECK-11-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
-// CHECK-11-NEXT: <RefType abbrevid=6 op0=2/>
-// CHECK-11-NEXT: <Field abbrevid=7 op0=3/>
-// CHECK-11-NEXT: </ReferenceBlock>
-// CHECK-11-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/ACE81AFA6627B4CEF2B456FB6E1252925674AF7E.bc | FileCheck %s --check-prefix CHECK-12
-// CHECK-12: <BLOCKINFO_BLOCK/>
-// CHECK-12-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-12-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-12-NEXT: </VersionBlock>
-// CHECK-12-NEXT: <RecordBlock NumWords=33 BlockCodeSize=4>
-// CHECK-12-NEXT: <USR abbrevid=4 op0=20 op1=172 op2=232 op3=26 op4=250 op5=102 op6=39 op7=180 op8=206 op9=242 op10=180 op11=86 op12=251 op13=110 op14=18 op15=82 op16=146 op17=86 op18=116 op19=175 op20=126/>
-// CHECK-12-NEXT: <Name abbrevid=5 op0=1/> blob data = 'A'
-// CHECK-12-NEXT: <DefLocation abbrevid=6 op0=15 op1=4/> blob data = '{{.*}}'
-// CHECK-12-NEXT: <TagType abbrevid=8 op0=2/>
-// CHECK-12-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-12-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-12-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-12-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-12-NEXT: </ReferenceBlock>
-// CHECK-12-NEXT: <Name abbrevid=4 op0=1/> blob data = 'X'
-// CHECK-12-NEXT: </MemberTypeBlock>
-// CHECK-12-NEXT: <MemberTypeBlock NumWords=8 BlockCodeSize=4>
-// CHECK-12-NEXT: <ReferenceBlock NumWords=3 BlockCodeSize=4>
-// CHECK-12-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
-// CHECK-12-NEXT: <Field abbrevid=7 op0=4/>
-// CHECK-12-NEXT: </ReferenceBlock>
-// CHECK-12-NEXT: <Name abbrevid=4 op0=1/> blob data = 'Y'
-// CHECK-12-NEXT: </MemberTypeBlock>
-// CHECK-12-NEXT: </RecordBlock>
-
-// RUN: llvm-bcanalyzer --dump %t/docs/bc/1E3438A08BA22025C0B46289FF0686F92C8924C5.bc | FileCheck %s --check-prefix CHECK-13
-// CHECK-13: <BLOCKINFO_BLOCK/>
-// CHECK-13-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-// CHECK-13-NEXT: <Version abbrevid=4 op0=2/>
-// CHECK-13-NEXT: </VersionBlock>
-// CHECK-13-NEXT: <EnumBlock NumWords=16 BlockCodeSize=4>
-// CHECK-13-NEXT: <USR abbrevid=4 op0=20 op1=30 op2=52 op3=56 op4=160 op5=139 op6=162 op7=32 op8=37 op9=192 op10=180 op11=98 op12=137 op13=255 op14=6 op15=134 op16=249 op17=44 op18=137 op19=36 op20=197/>
-// CHECK-13-NEXT: <Name abbrevid=5 op0=2/> blob data = 'Bc'
-// CHECK-13-NEXT: <DefLocation abbrevid=6 op0=19 op1=4/> blob data = '{{.*}}'
-// CHECK-13-NEXT: <Scoped abbrevid=9 op0=1/>
-// CHECK-13-NEXT: <Member abbrevid=8 op0=1/> blob data = 'A'
-// CHECK-13-NEXT: <Member abbrevid=8 op0=1/> blob data = 'B'
-// CHECK-13-NEXT: </EnumBlock>
diff --git a/clang-tools-extra/test/clang-doc/module.cpp b/clang-tools-extra/test/clang-doc/module.cpp
deleted file mode 100644
index a2b5945972d..00000000000
--- a/clang-tools-extra/test/clang-doc/module.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// RUN: rm -rf %t
-// RUN: mkdir %t
-// RUN: echo "" > %t/compile_flags.txt
-// RUN: cp "%s" "%t/test.cpp"
-// RUN: clang-doc --extra-arg=-fmodules-ts --doxygen -p %t %t/test.cpp -output=%t/docs
-// RUN: cat %t/docs/moduleFunction.yaml | FileCheck %s --check-prefix=CHECK-A
-// RUN: cat %t/docs/staticModuleFunction.yaml | FileCheck %s --check-prefix=CHECK-B
-// RUN: cat %t/docs/exportedModuleFunction.yaml | FileCheck %s --check-prefix=CHECK-C
-
-export module M;
-
-int moduleFunction(int x); //ModuleLinkage
-// CHECK-A: ---
-// CHECK-A-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-A-NEXT: Name: 'moduleFunction'
-// CHECK-A-NEXT: Location:
-// CHECK-A-NEXT: - LineNumber: 12
-// CHECK-A-NEXT: Filename: {{.*}}
-// CHECK-A-NEXT: Params:
-// CHECK-A-NEXT: - Type:
-// CHECK-A-NEXT: Name: 'int'
-// CHECK-A-NEXT: Name: 'x'
-// CHECK-A-NEXT: ReturnType:
-// CHECK-A-NEXT: Type:
-// CHECK-A-NEXT: Name: 'int'
-// CHECK-A-NEXT: ...
-
-static int staticModuleFunction(int x); //ModuleInternalLinkage
-// CHECK-B: ---
-// CHECK-B-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-B-NEXT: Name: 'staticModuleFunction'
-// CHECK-B-NEXT: Location:
-// CHECK-B-NEXT: - LineNumber: 28
-// CHECK-B-NEXT: Filename: {{.*}}
-// CHECK-B-NEXT: Params:
-// CHECK-B-NEXT: - Type:
-// CHECK-B-NEXT: Name: 'int'
-// CHECK-B-NEXT: Name: 'x'
-// CHECK-B-NEXT: ReturnType:
-// CHECK-B-NEXT: Type:
-// CHECK-B-NEXT: Name: 'int'
-// CHECK-B-NEXT: ...
-
-export double exportedModuleFunction(double y, int z); //ExternalLinkage
-// CHECK-C: ---
-// CHECK-C-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-C-NEXT: Name: 'exportedModuleFunction'
-// CHECK-C-NEXT: Location:
-// CHECK-C-NEXT: - LineNumber: 44
-// CHECK-C-NEXT: Filename: {{.*}}
-// CHECK-C-NEXT: Params:
-// CHECK-C-NEXT: - Type:
-// CHECK-C-NEXT: Name: 'double'
-// CHECK-C-NEXT: Name: 'y'
-// CHECK-C-NEXT: - Type:
-// CHECK-C-NEXT: Name: 'int'
-// CHECK-C-NEXT: Name: 'z'
-// CHECK-C-NEXT: ReturnType:
-// CHECK-C-NEXT: Type:
-// CHECK-C-NEXT: Name: 'double'
-// CHECK-C-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/public-comment.cpp b/clang-tools-extra/test/clang-doc/public-comment.cpp
new file mode 100644
index 00000000000..6c5545e8eb7
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/public-comment.cpp
@@ -0,0 +1,138 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+/// \brief Brief description.
+///
+/// Extended description that
+/// continues onto the next line.
+///
+/// <ul class="test">
+/// <li> Testing.
+/// </ul>
+///
+/// \verbatim
+/// The description continues.
+/// \endverbatim
+/// --
+/// \param [out] I is a parameter.
+/// \param J is a parameter.
+/// \return void
+void F(int I, int J);
+
+/// Bonus comment on definition
+void F(int I, int J) {}
+
+// RUN: clang-doc --format=yaml --doxygen --public --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'F'
+// CHECK-0-NEXT: Description:
+// CHECK-0-NEXT: - Kind: 'FullComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'BlockCommandComment'
+// CHECK-0-NEXT: Name: 'brief'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Brief description.'
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Extended description that'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' continues onto the next line.'
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'HTMLStartTagComment'
+// CHECK-0-NEXT: Name: 'ul'
+// CHECK-0-NEXT: AttrKeys:
+// CHECK-0-NEXT: - 'class'
+// CHECK-0-NEXT: AttrValues:
+// CHECK-0-NEXT: - 'test'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'HTMLStartTagComment'
+// CHECK-0-NEXT: Name: 'li'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Testing.'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'HTMLEndTagComment'
+// CHECK-0-NEXT: Name: 'ul'
+// CHECK-0-NEXT: SelfClosing: true
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'VerbatimBlockComment'
+// CHECK-0-NEXT: Name: 'verbatim'
+// CHECK-0-NEXT: CloseName: 'endverbatim'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'VerbatimBlockLineComment'
+// CHECK-0-NEXT: Text: ' The description continues.'
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' --'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'ParamCommandComment'
+// CHECK-0-NEXT: Direction: '[out]'
+// CHECK-0-NEXT: ParamName: 'I'
+// CHECK-0-NEXT: Explicit: true
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' is a parameter.'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'ParamCommandComment'
+// CHECK-0-NEXT: Direction: '[in]'
+// CHECK-0-NEXT: ParamName: 'J'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' is a parameter.'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'BlockCommandComment'
+// CHECK-0-NEXT: Name: 'return'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' void'
+// CHECK-0-NEXT: - Kind: 'FullComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Bonus comment on definition'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 28
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 25
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'I'
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'J'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/public-linkage.cpp b/clang-tools-extra/test/clang-doc/public-linkage.cpp
new file mode 100644
index 00000000000..c33e08ce6e4
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/public-linkage.cpp
@@ -0,0 +1,299 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// REQUIRES: system-linux
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+void function(int x);
+
+inline int inlinedFunction(int x);
+
+int functionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+inline int inlinedFunctionWithInnerClass(int x) {
+ class InnerClass { //VisibleNoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+class Class {
+public:
+ void publicMethod();
+ int publicField;
+
+protected:
+ void protectedMethod();
+ int protectedField;
+
+private:
+ void privateMethod();
+ int privateField;
+};
+
+namespace named {
+class NamedClass {
+public:
+ void namedPublicMethod();
+ int namedPublicField;
+
+protected:
+ void namedProtectedMethod();
+ int namedProtectedField;
+
+private:
+ void namedPrivateMethod();
+ int namedPrivateField;
+};
+
+void namedFunction();
+static void namedStaticFunction();
+inline void namedInlineFunction();
+} // namespace named
+
+static void staticFunction(int x); //Internal Linkage
+
+static int staticFunctionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+namespace {
+class AnonClass {
+public:
+ void anonPublicMethod();
+ int anonPublicField;
+
+protected:
+ void anonProtectedMethod();
+ int anonProtectedField;
+
+private:
+ void anonPrivateMethod();
+ int anonPrivateField;
+};
+
+void anonFunction();
+static void anonStaticFunction();
+inline void anonInlineFunction();
+} // namespace
+
+// RUN: clang-doc --format=yaml --doxygen --public --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./Class.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 32
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: TagType: Class
+// CHECK-0-NEXT: Members:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'publicField'
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'protectedField'
+// CHECK-0-NEXT: Access: Protected
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'publicMethod'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 34
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: IsMethod: true
+// CHECK-0-NEXT: Parent:
+// CHECK-0-NEXT: Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'protectedMethod'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 38
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: IsMethod: true
+// CHECK-0-NEXT: Parent:
+// CHECK-0-NEXT: Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: ...
+
+// RUN: cat %t/docs/./named.yaml | FileCheck %s --check-prefix CHECK-1
+// CHECK-1: ---
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: ChildFunctions:
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'namedFunction'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Location:
+// CHECK-1-NEXT: - LineNumber: 61
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'void'
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'namedInlineFunction'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Location:
+// CHECK-1-NEXT: - LineNumber: 63
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'void'
+// CHECK-1-NEXT: ...
+
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-2
+// CHECK-2: ---
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: ChildFunctions:
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'function'
+// CHECK-2-NEXT: Location:
+// CHECK-2-NEXT: - LineNumber: 10
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: Params:
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'x'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'void'
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'inlinedFunction'
+// CHECK-2-NEXT: Location:
+// CHECK-2-NEXT: - LineNumber: 12
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: Params:
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'x'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'functionWithInnerClass'
+// CHECK-2-NEXT: DefLocation:
+// CHECK-2-NEXT: LineNumber: 14
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: Params:
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'x'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'inlinedFunctionWithInnerClass'
+// CHECK-2-NEXT: DefLocation:
+// CHECK-2-NEXT: LineNumber: 23
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: Params:
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'x'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: ...
+
+// RUN: cat %t/docs/named/NamedClass.yaml | FileCheck %s --check-prefix CHECK-3
+// CHECK-3: ---
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'NamedClass'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Namespace
+// CHECK-3-NEXT: Name: 'named'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 47
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: TagType: Class
+// CHECK-3-NEXT: Members:
+// CHECK-3-NEXT: - Type:
+// CHECK-3-NEXT: Name: 'int'
+// CHECK-3-NEXT: Name: 'namedPublicField'
+// CHECK-3-NEXT: - Type:
+// CHECK-3-NEXT: Name: 'int'
+// CHECK-3-NEXT: Name: 'namedProtectedField'
+// CHECK-3-NEXT: Access: Protected
+// CHECK-3-NEXT: ChildFunctions:
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'namedPublicMethod'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'NamedClass'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: - Type: Namespace
+// CHECK-3-NEXT: Name: 'named'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 49
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'NamedClass'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'namedProtectedMethod'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'NamedClass'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: - Type: Namespace
+// CHECK-3-NEXT: Name: 'named'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 53
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'NamedClass'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/public-module.cpp b/clang-tools-extra/test/clang-doc/public-module.cpp
index c7ebadda7a6..0c93d688437 100644
--- a/clang-tools-extra/test/clang-doc/public-module.cpp
+++ b/clang-tools-extra/test/clang-doc/public-module.cpp
@@ -1,53 +1,51 @@
-// This test requires linux because it uses `diff` and compares filepaths
-// REQUIRES: system-linux
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: echo "" > %t/compile_flags.txt
// RUN: cp "%s" "%t/test.cpp"
-// RUN: clang-doc --public --extra-arg=-fmodules-ts --doxygen -p %t %t/test.cpp -output=%t/docs-with-public-flag
-// RUN: clang-doc --extra-arg=-fmodules-ts --doxygen -p %t %t/test.cpp -output=%t/docs-without
-// RUN: cat %t/docs-with-public-flag/moduleFunction.yaml | FileCheck %s --check-prefix=CHECK-A
-// RUN: cat %t/docs-with-public-flag/exportedModuleFunction.yaml | FileCheck %s --check-prefix=CHECK-B
-// RUN: (diff -qry %t/docs-with-public-flag %t/docs-without | sed 's:.*/::' > %t/public.diff) || true
-// RUN: cat %t/public.diff | FileCheck %s --check-prefix=CHECK-C
export module M;
-int moduleFunction(int x); //ModuleLinkage
-// CHECK-A: ---
-// CHECK-A-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-A-NEXT: Name: 'moduleFunction'
-// CHECK-A-NEXT: Location:
-// CHECK-A-NEXT: - LineNumber: 16
-// CHECK-A-NEXT: Filename: {{.*}}
-// CHECK-A-NEXT: Params:
-// CHECK-A-NEXT: - Type:
-// CHECK-A-NEXT: Name: 'int'
-// CHECK-A-NEXT: Name: 'x'
-// CHECK-A-NEXT: ReturnType:
-// CHECK-A-NEXT: Type:
-// CHECK-A-NEXT: Name: 'int'
-// CHECK-A-NEXT: ...
+int moduleFunction(int x); // ModuleLinkage
-static int staticModuleFunction(int x); //ModuleInternalLinkage
+static int staticModuleFunction(int x); // ModuleInternalLinkage
-export double exportedModuleFunction(double y, int z); //ExternalLinkage
-// CHECK-B: ---
-// CHECK-B-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-B-NEXT: Name: 'exportedModuleFunction'
-// CHECK-B-NEXT: Location:
-// CHECK-B-NEXT: - LineNumber: 34
-// CHECK-B-NEXT: Filename: {{.*}}
-// CHECK-B-NEXT: Params:
-// CHECK-B-NEXT: - Type:
-// CHECK-B-NEXT: Name: 'double'
-// CHECK-B-NEXT: Name: 'y'
-// CHECK-B-NEXT: - Type:
-// CHECK-B-NEXT: Name: 'int'
-// CHECK-B-NEXT: Name: 'z'
-// CHECK-B-NEXT: ReturnType:
-// CHECK-B-NEXT: Type:
-// CHECK-B-NEXT: Name: 'double'
-// CHECK-B-NEXT: ...
+export double exportedModuleFunction(double y, int z); // ExternalLinkage
-// CHECK-C: docs-without: staticModuleFunction.yaml
+// RUN: clang-doc --format=yaml --doxygen --public --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'moduleFunction'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 11
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'x'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'exportedModuleFunction'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 15
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'double'
+// CHECK-0-NEXT: Name: 'y'
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'z'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'double'
+// CHECK-0-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/public-namespace.cpp b/clang-tools-extra/test/clang-doc/public-namespace.cpp
new file mode 100644
index 00000000000..d104ff2c7d0
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/public-namespace.cpp
@@ -0,0 +1,96 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+namespace A {
+
+void f();
+
+} // namespace A
+
+namespace A {
+
+void f(){};
+
+namespace B {
+
+enum E { X };
+
+E func(int i) { return X; }
+
+} // namespace B
+} // namespace A
+
+// RUN: clang-doc --format=yaml --doxygen --public --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./A.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'A'
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'f'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Namespace
+// CHECK-0-NEXT: Name: 'A'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 17
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 11
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: ...
+
+// RUN: cat %t/docs/A/B.yaml | FileCheck %s --check-prefix CHECK-1
+// CHECK-1: ---
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'B'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'A'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: ChildFunctions:
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'func'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'B'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'A'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: DefLocation:
+// CHECK-1-NEXT: LineNumber: 23
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: Params:
+// CHECK-1-NEXT: - Type:
+// CHECK-1-NEXT: Name: 'int'
+// CHECK-1-NEXT: Name: 'i'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'enum A::B::E'
+// CHECK-1-NEXT: ChildEnums:
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'E'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'B'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'A'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: DefLocation:
+// CHECK-1-NEXT: LineNumber: 21
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: Members:
+// CHECK-1-NEXT: - 'X'
+// CHECK-1-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/public-record.cpp b/clang-tools-extra/test/clang-doc/public-record.cpp
new file mode 100644
index 00000000000..d3302193fde
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/public-record.cpp
@@ -0,0 +1,208 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// This test requires Linux due to system-dependent USR for the inner class.
+// REQUIRES: system-linux
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+void H() {
+ class I {};
+}
+
+union A { int X; int Y; };
+
+enum B { X, Y };
+
+enum class Bc { A, B };
+
+struct C { int i; };
+
+class D {};
+
+class E {
+public:
+ E() {}
+ ~E() {}
+
+protected:
+ void ProtectedMethod();
+};
+
+void E::ProtectedMethod() {}
+
+class F : virtual private D, public E {};
+
+class X {
+ class Y {};
+};
+
+// RUN: clang-doc --format=yaml --doxygen --public --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./C.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'C'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 21
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Members:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'i'
+// CHECK-0-NEXT: ...
+
+// RUN: cat %t/docs/./A.yaml | FileCheck %s --check-prefix CHECK-1
+// CHECK-1: ---
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'A'
+// CHECK-1-NEXT: DefLocation:
+// CHECK-1-NEXT: LineNumber: 15
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: TagType: Union
+// CHECK-1-NEXT: Members:
+// CHECK-1-NEXT: - Type:
+// CHECK-1-NEXT: Name: 'int'
+// CHECK-1-NEXT: Name: 'X'
+// CHECK-1-NEXT: - Type:
+// CHECK-1-NEXT: Name: 'int'
+// CHECK-1-NEXT: Name: 'Y'
+// CHECK-1-NEXT: ...
+
+// RUN: cat %t/docs/./F.yaml | FileCheck %s --check-prefix CHECK-2
+// CHECK-2: ---
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'F'
+// CHECK-2-NEXT: DefLocation:
+// CHECK-2-NEXT: LineNumber: 36
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: TagType: Class
+// CHECK-2-NEXT: Parents:
+// CHECK-2-NEXT: - Type: Record
+// CHECK-2-NEXT: Name: 'E'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: VirtualParents:
+// CHECK-2-NEXT: - Type: Record
+// CHECK-2-NEXT: Name: 'D'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: ...
+
+// RUN: cat %t/docs/./E.yaml | FileCheck %s --check-prefix CHECK-3
+// CHECK-3: ---
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 25
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: TagType: Class
+// CHECK-3-NEXT: ChildFunctions:
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 27
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: '~E'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 28
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'ProtectedMethod'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 34
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 31
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: ...
+
+// RUN: cat %t/docs/./D.yaml | FileCheck %s --check-prefix CHECK-4
+// CHECK-4: ---
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: Name: 'D'
+// CHECK-4-NEXT: DefLocation:
+// CHECK-4-NEXT: LineNumber: 23
+// CHECK-4-NEXT: Filename: 'test'
+// CHECK-4-NEXT: TagType: Class
+// CHECK-4-NEXT: ...
+
+// RUN: cat %t/docs/./X.yaml | FileCheck %s --check-prefix CHECK-5
+// CHECK-5: ---
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Name: 'X'
+// CHECK-5-NEXT: DefLocation:
+// CHECK-5-NEXT: LineNumber: 38
+// CHECK-5-NEXT: Filename: 'test'
+// CHECK-5-NEXT: TagType: Class
+// CHECK-5-NEXT: ...
+
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-6
+// CHECK-6: ---
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: ChildFunctions:
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'H'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 11
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: ReturnType:
+// CHECK-6-NEXT: Type:
+// CHECK-6-NEXT: Name: 'void'
+// CHECK-6-NEXT: ChildEnums:
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'B'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 17
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: Members:
+// CHECK-6-NEXT: - 'X'
+// CHECK-6-NEXT: - 'Y'
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'Bc'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 19
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: Scoped: true
+// CHECK-6-NEXT: Members:
+// CHECK-6-NEXT: - 'A'
+// CHECK-6-NEXT: - 'B'
+// CHECK-6-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/public-records.cpp b/clang-tools-extra/test/clang-doc/public-records.cpp
deleted file mode 100644
index a00a23b0ddc..00000000000
--- a/clang-tools-extra/test/clang-doc/public-records.cpp
+++ /dev/null
@@ -1,341 +0,0 @@
-// This test requires linux because it uses `diff` and compares filepaths
-// REQUIRES: system-linux
-// RUN: rm -rf %t
-// RUN: mkdir %t
-// RUN: echo "" > %t/compile_flags.txt
-// RUN: cp "%s" "%t/test.cpp"
-// RUN: clang-doc --public --doxygen -p %t %t/test.cpp -output=%t/docs
-// RUN: clang-doc --doxygen -p %t %t/test.cpp -output=%t/docs-without-flag
-// RUN: cat %t/docs/function.yaml | FileCheck %s --check-prefix=CHECK-A
-// RUN: cat %t/docs/inlinedFunction.yaml | FileCheck %s --check-prefix=CHECK-B
-// RUN: cat %t/docs/functionWithInnerClass.yaml | FileCheck %s --check-prefix=CHECK-C
-// RUN: cat %t/docs/inlinedFunctionWithInnerClass.yaml | FileCheck %s --check-prefix=CHECK-D
-// RUN: cat %t/docs/Class/publicMethod.yaml| FileCheck %s --check-prefix=CHECK-E
-// RUN: cat %t/docs/Class.yaml| FileCheck %s --check-prefix=CHECK-F
-// RUN: cat %t/docs/Class/protectedMethod.yaml| FileCheck %s --check-prefix=CHECK-G
-// RUN: cat %t/docs/named.yaml| FileCheck %s --check-prefix=CHECK-H
-// RUN: cat %t/docs/named/NamedClass.yaml| FileCheck %s --check-prefix=CHECK-I
-// RUN: cat %t/docs/named/namedFunction.yaml| FileCheck %s --check-prefix=CHECK-J
-// RUN: cat %t/docs/named/namedInlineFunction.yaml| FileCheck %s --check-prefix=CHECK-K
-// RUN: cat %t/docs/named/NamedClass/namedPublicMethod.yaml| FileCheck %s --check-prefix=CHECK-L
-// RUN: cat %t/docs/named/NamedClass/namedProtectedMethod.yaml| FileCheck %s --check-prefix=CHECK-M
-// RUN: (diff -qry %t/docs-without-flag %t/docs | sed 's:.*/::' > %t/public.diff) || true
-// RUN: cat %t/public.diff | FileCheck %s --check-prefix=CHECK-N
-
-void function(int x);
-
-// CHECK-A: ---
-// CHECK-A-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-A-NEXT: Name: 'function'
-// CHECK-A-NEXT: Location:
-// CHECK-A-NEXT: - LineNumber: 25
-// CHECK-A-NEXT: Filename: {{.*}}
-// CHECK-A-NEXT: Params:
-// CHECK-A-NEXT: - Type:
-// CHECK-A-NEXT: Name: 'int'
-// CHECK-A-NEXT: Name: 'x'
-// CHECK-A-NEXT: ReturnType:
-// CHECK-A-NEXT: Type:
-// CHECK-A-NEXT: Name: 'void'
-// CHECK-A-NEXT: ...
-
-inline int inlinedFunction(int x);
-
-// CHECK-B: ---
-// CHECK-B-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-B-NEXT: Name: 'inlinedFunction'
-// CHECK-B-NEXT: Location:
-// CHECK-B-NEXT: - LineNumber: 42
-// CHECK-B-NEXT: Filename: {{.*}}
-// CHECK-B-NEXT: Params:
-// CHECK-B-NEXT: - Type:
-// CHECK-B-NEXT: Name: 'int'
-// CHECK-B-NEXT: Name: 'x'
-// CHECK-B-NEXT: ReturnType:
-// CHECK-B-NEXT: Type:
-// CHECK-B-NEXT: Name: 'int'
-// CHECK-B-NEXT: ...
-
-int functionWithInnerClass(int x){
- class InnerClass { //NoLinkage
- public:
- int innerPublicMethod() { return 2; };
- }; //end class
- InnerClass temp;
- return temp.innerPublicMethod();
-};
-
-// CHECK-C: ---
-// CHECK-C-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-C-NEXT: Name: 'functionWithInnerClass'
-// CHECK-C-NEXT: DefLocation:
-// CHECK-C-NEXT: LineNumber: 59
-// CHECK-C-NEXT: Filename: {{.*}}
-// CHECK-C-NEXT: Params:
-// CHECK-C-NEXT: - Type:
-// CHECK-C-NEXT: Name: 'int'
-// CHECK-C-NEXT: Name: 'x'
-// CHECK-C-NEXT: ReturnType:
-// CHECK-C-NEXT: Type:
-// CHECK-C-NEXT: Name: 'int'
-// CHECK-C-NEXT: ...
-
-inline int inlinedFunctionWithInnerClass(int x){
- class InnerClass { //VisibleNoLinkage
- public:
- int innerPublicMethod() { return 2; };
- }; //end class
- InnerClass temp;
- return temp.innerPublicMethod();
-};
-
-// CHECK-D: ---
-// CHECK-D-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-D-NEXT: Name: 'inlinedFunctionWithInnerClass'
-// CHECK-D-NEXT: DefLocation:
-// CHECK-D-NEXT: LineNumber: 83
-// CHECK-D-NEXT: Filename: {{.*}}
-// CHECK-D-NEXT: Params:
-// CHECK-D-NEXT: - Type:
-// CHECK-D-NEXT: Name: 'int'
-// CHECK-D-NEXT: Name: 'x'
-// CHECK-D-NEXT: ReturnType:
-// CHECK-D-NEXT: Type:
-// CHECK-D-NEXT: Name: 'int'
-// CHECK-D-NEXT: ...
-
-class Class {
- public:
- void publicMethod();
- int publicField;
- protected:
- void protectedMethod();
- int protectedField;
- private:
- void privateMethod();
- int privateField;
-};
-
-// CHECK-E: ---
-// CHECK-E-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-E-NEXT: Name: 'publicMethod'
-// CHECK-E-NEXT: Namespace:
-// CHECK-E-NEXT: - Type: Record
-// CHECK-E-NEXT: Name: 'Class'
-// CHECK-E-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-E-NEXT: Location:
-// CHECK-E-NEXT: - LineNumber: 109
-// CHECK-E-NEXT: Filename: {{.*}}
-// CHECK-E-NEXT: IsMethod: true
-// CHECK-E-NEXT: Parent:
-// CHECK-E-NEXT: Type: Record
-// CHECK-E-NEXT: Name: 'Class'
-// CHECK-E-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-E-NEXT: ReturnType:
-// CHECK-E-NEXT: Type:
-// CHECK-E-NEXT: Name: 'void'
-// CHECK-E-NEXT: ...
-
-// CHECK-F: ---
-// CHECK-F-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-F-NEXT: Name: 'Class'
-// CHECK-F-NEXT: DefLocation:
-// CHECK-F-NEXT: LineNumber: 107
-// CHECK-F-NEXT: Filename: {{.*}}
-// CHECK-F-NEXT: TagType: Class
-// CHECK-F-NEXT: Members:
-// CHECK-F-NEXT: - Type:
-// CHECK-F-NEXT: Name: 'int'
-// CHECK-F-NEXT: Name: 'publicField'
-// CHECK-F-NEXT: - Type:
-// CHECK-F-NEXT: Name: 'int'
-// CHECK-F-NEXT: Name: 'protectedField'
-// CHECK-F-NEXT: Access: Protected
-// CHECK-F-NEXT: ...
-
-// CHECK-G: ---
-// CHECK-G-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-G-NEXT: Name: 'protectedMethod'
-// CHECK-G-NEXT: Namespace:
-// CHECK-G-NEXT: - Type: Record
-// CHECK-G-NEXT: Name: 'Class'
-// CHECK-G-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-G-NEXT: Location:
-// CHECK-G-NEXT: - LineNumber: 112
-// CHECK-G-NEXT: Filename: {{.*}}
-// CHECK-G-NEXT: IsMethod: true
-// CHECK-G-NEXT: Parent:
-// CHECK-G-NEXT: Type: Record
-// CHECK-G-NEXT: Name: 'Class'
-// CHECK-G-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-G-NEXT: ReturnType:
-// CHECK-G-NEXT: Type:
-// CHECK-G-NEXT: Name: 'void'
-// CHECK-G-NEXT: ...
-
-namespace named{
- class NamedClass {
- public:
- void namedPublicMethod();
- int namedPublicField;
- protected:
- void namedProtectedMethod();
- int namedProtectedField;
- private:
- void namedPrivateMethod();
- int namedPrivateField;
- };
-
- void namedFunction();
- static void namedStaticFunction();
- inline void namedInlineFunction();
-}
-
-// CHECK-H: ---
-// CHECK-H-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-H-NEXT: Name: 'named'
-// CHECK-H-NEXT: ...
-
-// CHECK-I: ---
-// CHECK-I-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-I-NEXT: Name: 'NamedClass'
-// CHECK-I-NEXT: Namespace:
-// CHECK-I-NEXT: - Type: Namespace
-// CHECK-I-NEXT: Name: 'named'
-// CHECK-I-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-I-NEXT: DefLocation:
-// CHECK-I-NEXT: LineNumber: 177
-// CHECK-I-NEXT: Filename: {{.*}}
-// CHECK-I-NEXT: TagType: Class
-// CHECK-I-NEXT: Members:
-// CHECK-I-NEXT: - Type:
-// CHECK-I-NEXT: Name: 'int'
-// CHECK-I-NEXT: Name: 'namedPublicField'
-// CHECK-I-NEXT: - Type:
-// CHECK-I-NEXT: Name: 'int'
-// CHECK-I-NEXT: Name: 'namedProtectedField'
-// CHECK-I-NEXT: Access: Protected
-// CHECK-I-NEXT: ...
-
-// CHECK-J: ---
-// CHECK-J-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-J-NEXT: Name: 'namedFunction'
-// CHECK-J-NEXT: Namespace:
-// CHECK-J-NEXT: - Type: Namespace
-// CHECK-J-NEXT: Name: 'named'
-// CHECK-J-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-J-NEXT: Location:
-// CHECK-J-NEXT: - LineNumber: 189
-// CHECK-J-NEXT: Filename: {{.*}}
-// CHECK-J-NEXT: ReturnType:
-// CHECK-J-NEXT: Type:
-// CHECK-J-NEXT: Name: 'void'
-// CHECK-J-NEXT: ...
-
-// CHECK-K: ---
-// CHECK-K-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-K-NEXT: Name: 'namedInlineFunction'
-// CHECK-K-NEXT: Namespace:
-// CHECK-K-NEXT: - Type: Namespace
-// CHECK-K-NEXT: Name: 'named'
-// CHECK-K-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-K-NEXT: Location:
-// CHECK-K-NEXT: - LineNumber: 191
-// CHECK-K-NEXT: Filename: {{.*}}
-// CHECK-K-NEXT: ReturnType:
-// CHECK-K-NEXT: Type:
-// CHECK-K-NEXT: Name: 'void'
-// CHECK-K-NEXT: ...
-
-// CHECK-L: ---
-// CHECK-L-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-L-NEXT: Name: 'namedPublicMethod'
-// CHECK-L-NEXT: Namespace:
-// CHECK-L-NEXT: - Type: Record
-// CHECK-L-NEXT: Name: 'NamedClass'
-// CHECK-L-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-L-NEXT: - Type: Namespace
-// CHECK-L-NEXT: Name: 'named'
-// CHECK-L-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-L-NEXT: Location:
-// CHECK-L-NEXT: - LineNumber: 179
-// CHECK-L-NEXT: Filename: {{.*}}
-// CHECK-L-NEXT: IsMethod: true
-// CHECK-L-NEXT: Parent:
-// CHECK-L-NEXT: Type: Record
-// CHECK-L-NEXT: Name: 'NamedClass'
-// CHECK-L-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-L-NEXT: ReturnType:
-// CHECK-L-NEXT: Type:
-// CHECK-L-NEXT: Name: 'void'
-// CHECK-L-NEXT: ...
-
-// CHECK-M: ---
-// CHECK-M-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-M-NEXT: Name: 'namedProtectedMethod'
-// CHECK-M-NEXT: Namespace:
-// CHECK-M-NEXT: - Type: Record
-// CHECK-M-NEXT: Name: 'NamedClass'
-// CHECK-M-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-M-NEXT: - Type: Namespace
-// CHECK-M-NEXT: Name: 'named'
-// CHECK-M-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-M-NEXT: Location:
-// CHECK-M-NEXT: - LineNumber: 182
-// CHECK-M-NEXT: Filename: {{.*}}
-// CHECK-M-NEXT: IsMethod: true
-// CHECK-M-NEXT: Parent:
-// CHECK-M-NEXT: Type: Record
-// CHECK-M-NEXT: Name: 'NamedClass'
-// CHECK-M-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
-// CHECK-M-NEXT: ReturnType:
-// CHECK-M-NEXT: Type:
-// CHECK-M-NEXT: Name: 'void'
-// CHECK-M-NEXT: ...
-
-
-static void staticFunction(int x); //Internal Linkage
-
-static int staticFunctionWithInnerClass(int x){
- class InnerClass { //NoLinkage
- public:
- int innerPublicMethod() { return 2; };
- }; //end class
- InnerClass temp;
- return temp.innerPublicMethod();
-};
-
-namespace{
- class AnonClass {
- public:
- void anonPublicMethod();
- int anonPublicField;
- protected:
- void anonProtectedMethod();
- int anonProtectedField;
- private:
- void anonPrivateMethod();
- int anonPrivateField;
- };
-
- void anonFunction();
- static void anonStaticFunction();
- inline void anonInlineFunction();
-}
-
-// CHECK-N: docs-without-flag: .yaml
-// CHECK-N-NEXT: docs-without-flag: AnonClass
-// CHECK-N-NEXT: docs-without-flag: AnonClass.yaml
-// CHECK-N-NEXT: Class: privateMethod.yaml
-// CHECK-N-NEXT: Class.yaml differ
-// CHECK-N-NEXT: docs-without-flag: anonFunction.yaml
-// CHECK-N-NEXT: docs-without-flag: anonInlineFunction.yaml
-// CHECK-N-NEXT: docs-without-flag: anonStaticFunction.yaml
-// CHECK-N-NEXT: docs-without-flag: functionWithInnerClass
-// CHECK-N-NEXT: docs-without-flag: inlinedFunctionWithInnerClass
-// CHECK-N-NEXT: NamedClass: namedPrivateMethod.yaml
-// CHECK-N-NEXT: NamedClass.yaml differ
-// CHECK-N-NEXT: named: namedStaticFunction.yaml
-// CHECK-N-NEXT: docs-without-flag: staticFunction.yaml
-// CHECK-N-NEXT: docs-without-flag: staticFunctionWithInnerClass
-// CHECK-N-NEXT: docs-without-flag: staticFunctionWithInnerClass.yaml
diff --git a/clang-tools-extra/test/clang-doc/test_cases/linkage.cpp b/clang-tools-extra/test/clang-doc/test_cases/linkage.cpp
new file mode 100644
index 00000000000..ed4b4a30345
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/test_cases/linkage.cpp
@@ -0,0 +1,95 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// REQUIRES: system-linux
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+void function(int x);
+
+inline int inlinedFunction(int x);
+
+int functionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+inline int inlinedFunctionWithInnerClass(int x) {
+ class InnerClass { //VisibleNoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+class Class {
+public:
+ void publicMethod();
+ int publicField;
+
+protected:
+ void protectedMethod();
+ int protectedField;
+
+private:
+ void privateMethod();
+ int privateField;
+};
+
+namespace named {
+class NamedClass {
+public:
+ void namedPublicMethod();
+ int namedPublicField;
+
+protected:
+ void namedProtectedMethod();
+ int namedProtectedField;
+
+private:
+ void namedPrivateMethod();
+ int namedPrivateField;
+};
+
+void namedFunction();
+static void namedStaticFunction();
+inline void namedInlineFunction();
+} // namespace named
+
+static void staticFunction(int x); //Internal Linkage
+
+static int staticFunctionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+namespace {
+class AnonClass {
+public:
+ void anonPublicMethod();
+ int anonPublicField;
+
+protected:
+ void anonProtectedMethod();
+ int anonProtectedField;
+
+private:
+ void anonPrivateMethod();
+ int anonPrivateField;
+};
+
+void anonFunction();
+static void anonStaticFunction();
+inline void anonInlineFunction();
+} // namespace
diff --git a/clang-tools-extra/test/clang-doc/test_cases/module.cpp b/clang-tools-extra/test/clang-doc/test_cases/module.cpp
new file mode 100644
index 00000000000..3c30a5476f8
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/test_cases/module.cpp
@@ -0,0 +1,15 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+export module M;
+
+int moduleFunction(int x); // ModuleLinkage
+
+static int staticModuleFunction(int x); // ModuleInternalLinkage
+
+export double exportedModuleFunction(double y, int z); // ExternalLinkage
diff --git a/clang-tools-extra/test/clang-doc/yaml-comment.cpp b/clang-tools-extra/test/clang-doc/yaml-comment.cpp
index 445e2be199c..7aa8e64d50d 100644
--- a/clang-tools-extra/test/clang-doc/yaml-comment.cpp
+++ b/clang-tools-extra/test/clang-doc/yaml-comment.cpp
@@ -27,110 +27,112 @@ void F(int I, int J);
/// Bonus comment on definition
void F(int I, int J) {}
-// RUN: clang-doc --format=yaml --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --format=yaml --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
-// RUN: cat %t/docs/./F.yaml | FileCheck %s --check-prefix CHECK-0
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-0
// CHECK-0: ---
-// CHECK-0-NEXT: USR: '7574630614A535710E5A6ABCFFF98BCA2D06A4CA'
-// CHECK-0-NEXT: Name: 'F'
-// CHECK-0-NEXT: Description:
-// CHECK-0-NEXT: - Kind: 'FullComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'ParagraphComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'BlockCommandComment'
-// CHECK-0-NEXT: Name: 'brief'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'F'
+// CHECK-0-NEXT: Description:
+// CHECK-0-NEXT: - Kind: 'FullComment'
// CHECK-0-NEXT: Children:
// CHECK-0-NEXT: - Kind: 'ParagraphComment'
// CHECK-0-NEXT: Children:
// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' Brief description.'
-// CHECK-0-NEXT: - Kind: 'ParagraphComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' Extended description that'
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' continues onto the next line.'
-// CHECK-0-NEXT: - Kind: 'ParagraphComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'HTMLStartTagComment'
-// CHECK-0-NEXT: Name: 'ul'
-// CHECK-0-NEXT: AttrKeys:
-// CHECK-0-NEXT: - 'class'
-// CHECK-0-NEXT: AttrValues:
-// CHECK-0-NEXT: - 'test'
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'HTMLStartTagComment'
-// CHECK-0-NEXT: Name: 'li'
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' Testing.'
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'HTMLEndTagComment'
-// CHECK-0-NEXT: Name: 'ul'
-// CHECK-0-NEXT: SelfClosing: true
-// CHECK-0-NEXT: - Kind: 'ParagraphComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'VerbatimBlockComment'
-// CHECK-0-NEXT: Name: 'verbatim'
-// CHECK-0-NEXT: CloseName: 'endverbatim'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'VerbatimBlockLineComment'
-// CHECK-0-NEXT: Text: ' The description continues.'
-// CHECK-0-NEXT: - Kind: 'ParagraphComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' --'
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'ParamCommandComment'
-// CHECK-0-NEXT: Direction: '[out]'
-// CHECK-0-NEXT: ParamName: 'I'
-// CHECK-0-NEXT: Explicit: true
-// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'BlockCommandComment'
+// CHECK-0-NEXT: Name: 'brief'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Brief description.'
// CHECK-0-NEXT: - Kind: 'ParagraphComment'
// CHECK-0-NEXT: Children:
// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' is a parameter.'
+// CHECK-0-NEXT: Text: ' Extended description that'
// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'ParamCommandComment'
-// CHECK-0-NEXT: Direction: '[in]'
-// CHECK-0-NEXT: ParamName: 'J'
-// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: Text: ' continues onto the next line.'
// CHECK-0-NEXT: - Kind: 'ParagraphComment'
// CHECK-0-NEXT: Children:
// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' is a parameter.'
+// CHECK-0-NEXT: - Kind: 'HTMLStartTagComment'
+// CHECK-0-NEXT: Name: 'ul'
+// CHECK-0-NEXT: AttrKeys:
+// CHECK-0-NEXT: - 'class'
+// CHECK-0-NEXT: AttrValues:
+// CHECK-0-NEXT: - 'test'
// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: - Kind: 'BlockCommandComment'
-// CHECK-0-NEXT: Name: 'return'
-// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'HTMLStartTagComment'
+// CHECK-0-NEXT: Name: 'li'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Testing.'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'HTMLEndTagComment'
+// CHECK-0-NEXT: Name: 'ul'
+// CHECK-0-NEXT: SelfClosing: true
// CHECK-0-NEXT: - Kind: 'ParagraphComment'
// CHECK-0-NEXT: Children:
// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' void'
-// CHECK-0-NEXT: - Kind: 'FullComment'
-// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: - Kind: 'VerbatimBlockComment'
+// CHECK-0-NEXT: Name: 'verbatim'
+// CHECK-0-NEXT: CloseName: 'endverbatim'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'VerbatimBlockLineComment'
+// CHECK-0-NEXT: Text: ' The description continues.'
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' --'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'ParamCommandComment'
+// CHECK-0-NEXT: Direction: '[out]'
+// CHECK-0-NEXT: ParamName: 'I'
+// CHECK-0-NEXT: Explicit: true
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' is a parameter.'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'ParamCommandComment'
+// CHECK-0-NEXT: Direction: '[in]'
+// CHECK-0-NEXT: ParamName: 'J'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' is a parameter.'
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: - Kind: 'BlockCommandComment'
+// CHECK-0-NEXT: Name: 'return'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' void'
+// CHECK-0-NEXT: - Kind: 'FullComment'
// CHECK-0-NEXT: Children:
-// CHECK-0-NEXT: - Kind: 'TextComment'
-// CHECK-0-NEXT: Text: ' Bonus comment on definition'
-// CHECK-0-NEXT: DefLocation:
-// CHECK-0-NEXT: LineNumber: 28
-// CHECK-0-NEXT: Filename: 'test'
-// CHECK-0-NEXT: Location:
-// CHECK-0-NEXT: - LineNumber: 25
-// CHECK-0-NEXT: Filename: 'test'
-// CHECK-0-NEXT: Params:
-// CHECK-0-NEXT: - Type:
-// CHECK-0-NEXT: Name: 'int'
-// CHECK-0-NEXT: Name: 'I'
-// CHECK-0-NEXT: - Type:
-// CHECK-0-NEXT: Name: 'int'
-// CHECK-0-NEXT: Name: 'J'
-// CHECK-0-NEXT: ReturnType:
-// CHECK-0-NEXT: Type:
-// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: - Kind: 'ParagraphComment'
+// CHECK-0-NEXT: Children:
+// CHECK-0-NEXT: - Kind: 'TextComment'
+// CHECK-0-NEXT: Text: ' Bonus comment on definition'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 28
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 25
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'I'
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'J'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
// CHECK-0-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/yaml-linkage.cpp b/clang-tools-extra/test/clang-doc/yaml-linkage.cpp
new file mode 100644
index 00000000000..3a0aa5bf92b
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/yaml-linkage.cpp
@@ -0,0 +1,529 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// REQUIRES: system-linux
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+void function(int x);
+
+inline int inlinedFunction(int x);
+
+int functionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+inline int inlinedFunctionWithInnerClass(int x) {
+ class InnerClass { //VisibleNoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+class Class {
+public:
+ void publicMethod();
+ int publicField;
+
+protected:
+ void protectedMethod();
+ int protectedField;
+
+private:
+ void privateMethod();
+ int privateField;
+};
+
+namespace named {
+class NamedClass {
+public:
+ void namedPublicMethod();
+ int namedPublicField;
+
+protected:
+ void namedProtectedMethod();
+ int namedProtectedField;
+
+private:
+ void namedPrivateMethod();
+ int namedPrivateField;
+};
+
+void namedFunction();
+static void namedStaticFunction();
+inline void namedInlineFunction();
+} // namespace named
+
+static void staticFunction(int x); //Internal Linkage
+
+static int staticFunctionWithInnerClass(int x) {
+ class InnerClass { //NoLinkage
+ public:
+ int innerPublicMethod() { return 2; };
+ }; //end class
+ InnerClass temp;
+ return temp.innerPublicMethod();
+};
+
+namespace {
+class AnonClass {
+public:
+ void anonPublicMethod();
+ int anonPublicField;
+
+protected:
+ void anonProtectedMethod();
+ int anonProtectedField;
+
+private:
+ void anonPrivateMethod();
+ int anonPrivateField;
+};
+
+void anonFunction();
+static void anonStaticFunction();
+inline void anonInlineFunction();
+} // namespace
+
+// RUN: clang-doc --format=yaml --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./Class.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 32
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: TagType: Class
+// CHECK-0-NEXT: Members:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'publicField'
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'protectedField'
+// CHECK-0-NEXT: Access: Protected
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'privateField'
+// CHECK-0-NEXT: Access: Private
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'publicMethod'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 34
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: IsMethod: true
+// CHECK-0-NEXT: Parent:
+// CHECK-0-NEXT: Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'protectedMethod'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 38
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: IsMethod: true
+// CHECK-0-NEXT: Parent:
+// CHECK-0-NEXT: Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'privateMethod'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 42
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: IsMethod: true
+// CHECK-0-NEXT: Parent:
+// CHECK-0-NEXT: Type: Record
+// CHECK-0-NEXT: Name: 'Class'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
+// CHECK-0-NEXT: ...
+
+// RUN: cat %t/docs/./named.yaml | FileCheck %s --check-prefix CHECK-1
+// CHECK-1: ---
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: ChildFunctions:
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'namedFunction'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Location:
+// CHECK-1-NEXT: - LineNumber: 61
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'void'
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'namedStaticFunction'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Location:
+// CHECK-1-NEXT: - LineNumber: 62
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'void'
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'namedInlineFunction'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'named'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Location:
+// CHECK-1-NEXT: - LineNumber: 63
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'void'
+// CHECK-1-NEXT: ...
+
+// RUN: cat %t/docs/./AnonClass.yaml | FileCheck %s --check-prefix CHECK-2
+// CHECK-2: ---
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: Namespace:
+// CHECK-2-NEXT: - Type: Namespace
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: DefLocation:
+// CHECK-2-NEXT: LineNumber: 78
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: TagType: Class
+// CHECK-2-NEXT: Members:
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'anonPublicField'
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'anonProtectedField'
+// CHECK-2-NEXT: Access: Protected
+// CHECK-2-NEXT: - Type:
+// CHECK-2-NEXT: Name: 'int'
+// CHECK-2-NEXT: Name: 'anonPrivateField'
+// CHECK-2-NEXT: Access: Private
+// CHECK-2-NEXT: ChildFunctions:
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'anonPublicMethod'
+// CHECK-2-NEXT: Namespace:
+// CHECK-2-NEXT: - Type: Record
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: - Type: Namespace
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Location:
+// CHECK-2-NEXT: - LineNumber: 80
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: IsMethod: true
+// CHECK-2-NEXT: Parent:
+// CHECK-2-NEXT: Type: Record
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'void'
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'anonProtectedMethod'
+// CHECK-2-NEXT: Namespace:
+// CHECK-2-NEXT: - Type: Record
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: - Type: Namespace
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Location:
+// CHECK-2-NEXT: - LineNumber: 84
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: IsMethod: true
+// CHECK-2-NEXT: Parent:
+// CHECK-2-NEXT: Type: Record
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'void'
+// CHECK-2-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Name: 'anonPrivateMethod'
+// CHECK-2-NEXT: Namespace:
+// CHECK-2-NEXT: - Type: Record
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: - Type: Namespace
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: Location:
+// CHECK-2-NEXT: - LineNumber: 88
+// CHECK-2-NEXT: Filename: 'test'
+// CHECK-2-NEXT: IsMethod: true
+// CHECK-2-NEXT: Parent:
+// CHECK-2-NEXT: Type: Record
+// CHECK-2-NEXT: Name: 'AnonClass'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-2-NEXT: ReturnType:
+// CHECK-2-NEXT: Type:
+// CHECK-2-NEXT: Name: 'void'
+// CHECK-2-NEXT: ...
+
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-3
+// CHECK-3: ---
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ChildFunctions:
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'anonFunction'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Namespace
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 92
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'anonStaticFunction'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Namespace
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 93
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'anonInlineFunction'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Namespace
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 94
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: ...
+
+// RUN: cat %t/docs/staticFunctionWithInnerClass/InnerClass.yaml | FileCheck %s --check-prefix CHECK-4
+// CHECK-4: ---
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: Name: 'InnerClass'
+// CHECK-4-NEXT: Namespace:
+// CHECK-4-NEXT: - Type: Function
+// CHECK-4-NEXT: Name: 'staticFunctionWithInnerClass'
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: DefLocation:
+// CHECK-4-NEXT: LineNumber: 69
+// CHECK-4-NEXT: Filename: 'test'
+// CHECK-4-NEXT: TagType: Class
+// CHECK-4-NEXT: ChildFunctions:
+// CHECK-4-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: Name: 'innerPublicMethod'
+// CHECK-4-NEXT: Namespace:
+// CHECK-4-NEXT: - Type: Record
+// CHECK-4-NEXT: Name: 'InnerClass'
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: - Type: Function
+// CHECK-4-NEXT: Name: 'staticFunctionWithInnerClass'
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: DefLocation:
+// CHECK-4-NEXT: LineNumber: 71
+// CHECK-4-NEXT: Filename: 'test'
+// CHECK-4-NEXT: IsMethod: true
+// CHECK-4-NEXT: Parent:
+// CHECK-4-NEXT: Type: Record
+// CHECK-4-NEXT: Name: 'InnerClass'
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-4-NEXT: ReturnType:
+// CHECK-4-NEXT: Type:
+// CHECK-4-NEXT: Name: 'int'
+// CHECK-4-NEXT: ...
+
+// RUN: cat %t/docs/named/NamedClass.yaml | FileCheck %s --check-prefix CHECK-5
+// CHECK-5: ---
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: Namespace:
+// CHECK-5-NEXT: - Type: Namespace
+// CHECK-5-NEXT: Name: 'named'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: DefLocation:
+// CHECK-5-NEXT: LineNumber: 47
+// CHECK-5-NEXT: Filename: 'test'
+// CHECK-5-NEXT: TagType: Class
+// CHECK-5-NEXT: Members:
+// CHECK-5-NEXT: - Type:
+// CHECK-5-NEXT: Name: 'int'
+// CHECK-5-NEXT: Name: 'namedPublicField'
+// CHECK-5-NEXT: - Type:
+// CHECK-5-NEXT: Name: 'int'
+// CHECK-5-NEXT: Name: 'namedProtectedField'
+// CHECK-5-NEXT: Access: Protected
+// CHECK-5-NEXT: - Type:
+// CHECK-5-NEXT: Name: 'int'
+// CHECK-5-NEXT: Name: 'namedPrivateField'
+// CHECK-5-NEXT: Access: Private
+// CHECK-5-NEXT: ChildFunctions:
+// CHECK-5-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Name: 'namedPublicMethod'
+// CHECK-5-NEXT: Namespace:
+// CHECK-5-NEXT: - Type: Record
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: - Type: Namespace
+// CHECK-5-NEXT: Name: 'named'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Location:
+// CHECK-5-NEXT: - LineNumber: 49
+// CHECK-5-NEXT: Filename: 'test'
+// CHECK-5-NEXT: IsMethod: true
+// CHECK-5-NEXT: Parent:
+// CHECK-5-NEXT: Type: Record
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: ReturnType:
+// CHECK-5-NEXT: Type:
+// CHECK-5-NEXT: Name: 'void'
+// CHECK-5-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Name: 'namedProtectedMethod'
+// CHECK-5-NEXT: Namespace:
+// CHECK-5-NEXT: - Type: Record
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: - Type: Namespace
+// CHECK-5-NEXT: Name: 'named'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Location:
+// CHECK-5-NEXT: - LineNumber: 53
+// CHECK-5-NEXT: Filename: 'test'
+// CHECK-5-NEXT: IsMethod: true
+// CHECK-5-NEXT: Parent:
+// CHECK-5-NEXT: Type: Record
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: ReturnType:
+// CHECK-5-NEXT: Type:
+// CHECK-5-NEXT: Name: 'void'
+// CHECK-5-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Name: 'namedPrivateMethod'
+// CHECK-5-NEXT: Namespace:
+// CHECK-5-NEXT: - Type: Record
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: - Type: Namespace
+// CHECK-5-NEXT: Name: 'named'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Location:
+// CHECK-5-NEXT: - LineNumber: 57
+// CHECK-5-NEXT: Filename: 'test'
+// CHECK-5-NEXT: IsMethod: true
+// CHECK-5-NEXT: Parent:
+// CHECK-5-NEXT: Type: Record
+// CHECK-5-NEXT: Name: 'NamedClass'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: ReturnType:
+// CHECK-5-NEXT: Type:
+// CHECK-5-NEXT: Name: 'void'
+// CHECK-5-NEXT: ...
+
+// RUN: cat %t/docs/functionWithInnerClass/InnerClass.yaml | FileCheck %s --check-prefix CHECK-6
+// CHECK-6: ---
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'InnerClass'
+// CHECK-6-NEXT: Namespace:
+// CHECK-6-NEXT: - Type: Function
+// CHECK-6-NEXT: Name: 'functionWithInnerClass'
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 15
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: TagType: Class
+// CHECK-6-NEXT: ChildFunctions:
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'innerPublicMethod'
+// CHECK-6-NEXT: Namespace:
+// CHECK-6-NEXT: - Type: Record
+// CHECK-6-NEXT: Name: 'InnerClass'
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: - Type: Function
+// CHECK-6-NEXT: Name: 'functionWithInnerClass'
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 17
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: IsMethod: true
+// CHECK-6-NEXT: Parent:
+// CHECK-6-NEXT: Type: Record
+// CHECK-6-NEXT: Name: 'InnerClass'
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: ReturnType:
+// CHECK-6-NEXT: Type:
+// CHECK-6-NEXT: Name: 'int'
+// CHECK-6-NEXT: ...
+
+// RUN: cat %t/docs/inlinedFunctionWithInnerClass/InnerClass.yaml | FileCheck %s --check-prefix CHECK-7
+// CHECK-7: ---
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: Name: 'InnerClass'
+// CHECK-7-NEXT: Namespace:
+// CHECK-7-NEXT: - Type: Function
+// CHECK-7-NEXT: Name: 'inlinedFunctionWithInnerClass'
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: DefLocation:
+// CHECK-7-NEXT: LineNumber: 24
+// CHECK-7-NEXT: Filename: 'test'
+// CHECK-7-NEXT: TagType: Class
+// CHECK-7-NEXT: ChildFunctions:
+// CHECK-7-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: Name: 'innerPublicMethod'
+// CHECK-7-NEXT: Namespace:
+// CHECK-7-NEXT: - Type: Record
+// CHECK-7-NEXT: Name: 'InnerClass'
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: - Type: Function
+// CHECK-7-NEXT: Name: 'inlinedFunctionWithInnerClass'
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: DefLocation:
+// CHECK-7-NEXT: LineNumber: 26
+// CHECK-7-NEXT: Filename: 'test'
+// CHECK-7-NEXT: IsMethod: true
+// CHECK-7-NEXT: Parent:
+// CHECK-7-NEXT: Type: Record
+// CHECK-7-NEXT: Name: 'InnerClass'
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: ReturnType:
+// CHECK-7-NEXT: Type:
+// CHECK-7-NEXT: Name: 'int'
+// CHECK-7-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/yaml-module.cpp b/clang-tools-extra/test/clang-doc/yaml-module.cpp
new file mode 100644
index 00000000000..80602aca81a
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/yaml-module.cpp
@@ -0,0 +1,63 @@
+// THIS IS A GENERATED TEST. DO NOT EDIT.
+// To regenerate, see clang-doc/gen_test.py docstring.
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo "" > %t/compile_flags.txt
+// RUN: cp "%s" "%t/test.cpp"
+
+export module M;
+
+int moduleFunction(int x); // ModuleLinkage
+
+static int staticModuleFunction(int x); // ModuleInternalLinkage
+
+export double exportedModuleFunction(double y, int z); // ExternalLinkage
+
+// RUN: clang-doc --format=yaml --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
+
+
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-0
+// CHECK-0: ---
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'moduleFunction'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 11
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'x'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'staticModuleFunction'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 13
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'x'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'exportedModuleFunction'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 15
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Params:
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'double'
+// CHECK-0-NEXT: Name: 'y'
+// CHECK-0-NEXT: - Type:
+// CHECK-0-NEXT: Name: 'int'
+// CHECK-0-NEXT: Name: 'z'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'double'
+// CHECK-0-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/yaml-namespace.cpp b/clang-tools-extra/test/clang-doc/yaml-namespace.cpp
index c547c5c496f..d187f7e39d7 100644
--- a/clang-tools-extra/test/clang-doc/yaml-namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/yaml-namespace.cpp
@@ -25,81 +25,72 @@ E func(int i) { return X; }
} // namespace B
} // namespace A
-// RUN: clang-doc --format=yaml --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --format=yaml --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
// RUN: cat %t/docs/./A.yaml | FileCheck %s --check-prefix CHECK-0
// CHECK-0: ---
-// CHECK-0-NEXT: USR: '8D042EFFC98B373450BC6B5B90A330C25A150E9C'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-0-NEXT: Name: 'A'
+// CHECK-0-NEXT: ChildFunctions:
+// CHECK-0-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: Name: 'f'
+// CHECK-0-NEXT: Namespace:
+// CHECK-0-NEXT: - Type: Namespace
+// CHECK-0-NEXT: Name: 'A'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-0-NEXT: DefLocation:
+// CHECK-0-NEXT: LineNumber: 17
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: Location:
+// CHECK-0-NEXT: - LineNumber: 11
+// CHECK-0-NEXT: Filename: 'test'
+// CHECK-0-NEXT: ReturnType:
+// CHECK-0-NEXT: Type:
+// CHECK-0-NEXT: Name: 'void'
// CHECK-0-NEXT: ...
-// RUN: cat %t/docs/A/f.yaml | FileCheck %s --check-prefix CHECK-1
+// RUN: cat %t/docs/A/B.yaml | FileCheck %s --check-prefix CHECK-1
// CHECK-1: ---
-// CHECK-1-NEXT: USR: '39D3C95A5F7CE2BA4937BD7B01BAE09EBC2AD8AC'
-// CHECK-1-NEXT: Name: 'f'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'B'
// CHECK-1-NEXT: Namespace:
// CHECK-1-NEXT: - Type: Namespace
// CHECK-1-NEXT: Name: 'A'
-// CHECK-1-NEXT: USR: '8D042EFFC98B373450BC6B5B90A330C25A150E9C'
-// CHECK-1-NEXT: DefLocation:
-// CHECK-1-NEXT: LineNumber: 17
-// CHECK-1-NEXT: Filename: 'test'
-// CHECK-1-NEXT: Location:
-// CHECK-1-NEXT: - LineNumber: 11
-// CHECK-1-NEXT: Filename: 'test'
-// CHECK-1-NEXT: ReturnType:
-// CHECK-1-NEXT: Type:
-// CHECK-1-NEXT: Name: 'void'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: ChildFunctions:
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'func'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'B'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'A'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: DefLocation:
+// CHECK-1-NEXT: LineNumber: 23
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: Params:
+// CHECK-1-NEXT: - Type:
+// CHECK-1-NEXT: Name: 'int'
+// CHECK-1-NEXT: Name: 'i'
+// CHECK-1-NEXT: ReturnType:
+// CHECK-1-NEXT: Type:
+// CHECK-1-NEXT: Name: 'enum A::B::E'
+// CHECK-1-NEXT: ChildEnums:
+// CHECK-1-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: Name: 'E'
+// CHECK-1-NEXT: Namespace:
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'B'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: - Type: Namespace
+// CHECK-1-NEXT: Name: 'A'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-1-NEXT: DefLocation:
+// CHECK-1-NEXT: LineNumber: 21
+// CHECK-1-NEXT: Filename: 'test'
+// CHECK-1-NEXT: Members:
+// CHECK-1-NEXT: - 'X'
// CHECK-1-NEXT: ...
-
-// RUN: cat %t/docs/A/B.yaml | FileCheck %s --check-prefix CHECK-2
-// CHECK-2: ---
-// CHECK-2-NEXT: USR: 'E21AF79E2A9D02554BA090D10DF39FE273F5CDB5'
-// CHECK-2-NEXT: Name: 'B'
-// CHECK-2-NEXT: Namespace:
-// CHECK-2-NEXT: - Type: Namespace
-// CHECK-2-NEXT: Name: 'A'
-// CHECK-2-NEXT: USR: '8D042EFFC98B373450BC6B5B90A330C25A150E9C'
-// CHECK-2-NEXT: ...
-
-// RUN: cat %t/docs/A/B/E.yaml | FileCheck %s --check-prefix CHECK-3
-// CHECK-3: ---
-// CHECK-3-NEXT: USR: 'E9ABF7E7E2425B626723D41E76E4BC7E7A5BD775'
-// CHECK-3-NEXT: Name: 'E'
-// CHECK-3-NEXT: Namespace:
-// CHECK-3-NEXT: - Type: Namespace
-// CHECK-3-NEXT: Name: 'B'
-// CHECK-3-NEXT: USR: 'E21AF79E2A9D02554BA090D10DF39FE273F5CDB5'
-// CHECK-3-NEXT: - Type: Namespace
-// CHECK-3-NEXT: Name: 'A'
-// CHECK-3-NEXT: USR: '8D042EFFC98B373450BC6B5B90A330C25A150E9C'
-// CHECK-3-NEXT: DefLocation:
-// CHECK-3-NEXT: LineNumber: 21
-// CHECK-3-NEXT: Filename: 'test'
-// CHECK-3-NEXT: Members:
-// CHECK-3-NEXT: - 'X'
-// CHECK-3-NEXT: ...
-
-// RUN: cat %t/docs/A/B/func.yaml | FileCheck %s --check-prefix CHECK-4
-// CHECK-4: ---
-// CHECK-4-NEXT: USR: '9A82CB33ED0FDF81EE383D31CD0957D153C5E840'
-// CHECK-4-NEXT: Name: 'func'
-// CHECK-4-NEXT: Namespace:
-// CHECK-4-NEXT: - Type: Namespace
-// CHECK-4-NEXT: Name: 'B'
-// CHECK-4-NEXT: USR: 'E21AF79E2A9D02554BA090D10DF39FE273F5CDB5'
-// CHECK-4-NEXT: - Type: Namespace
-// CHECK-4-NEXT: Name: 'A'
-// CHECK-4-NEXT: USR: '8D042EFFC98B373450BC6B5B90A330C25A150E9C'
-// CHECK-4-NEXT: DefLocation:
-// CHECK-4-NEXT: LineNumber: 23
-// CHECK-4-NEXT: Filename: 'test'
-// CHECK-4-NEXT: Params:
-// CHECK-4-NEXT: - Type:
-// CHECK-4-NEXT: Name: 'int'
-// CHECK-4-NEXT: Name: 'i'
-// CHECK-4-NEXT: ReturnType:
-// CHECK-4-NEXT: Type:
-// CHECK-4-NEXT: Name: 'enum A::B::E'
-// CHECK-4-NEXT: ...
diff --git a/clang-tools-extra/test/clang-doc/yaml-record.cpp b/clang-tools-extra/test/clang-doc/yaml-record.cpp
index 1d5235f5cc6..8fad2201751 100644
--- a/clang-tools-extra/test/clang-doc/yaml-record.cpp
+++ b/clang-tools-extra/test/clang-doc/yaml-record.cpp
@@ -39,12 +39,12 @@ class X {
class Y {};
};
-// RUN: clang-doc --format=yaml --doxygen -p %t %t/test.cpp -output=%t/docs
+// RUN: clang-doc --format=yaml --doxygen --extra-arg=-fmodules-ts -p %t %t/test.cpp -output=%t/docs
// RUN: cat %t/docs/./C.yaml | FileCheck %s --check-prefix CHECK-0
// CHECK-0: ---
-// CHECK-0-NEXT: USR: '06B5F6A19BA9F6A832E127C9968282B94619B210'
+// CHECK-0-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-0-NEXT: Name: 'C'
// CHECK-0-NEXT: DefLocation:
// CHECK-0-NEXT: LineNumber: 21
@@ -57,7 +57,7 @@ class X {
// RUN: cat %t/docs/./A.yaml | FileCheck %s --check-prefix CHECK-1
// CHECK-1: ---
-// CHECK-1-NEXT: USR: 'ACE81AFA6627B4CEF2B456FB6E1252925674AF7E'
+// CHECK-1-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-1-NEXT: Name: 'A'
// CHECK-1-NEXT: DefLocation:
// CHECK-1-NEXT: LineNumber: 15
@@ -74,7 +74,7 @@ class X {
// RUN: cat %t/docs/./F.yaml | FileCheck %s --check-prefix CHECK-2
// CHECK-2: ---
-// CHECK-2-NEXT: USR: 'E3B54702FABFF4037025BA194FC27C47006330B5'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-2-NEXT: Name: 'F'
// CHECK-2-NEXT: DefLocation:
// CHECK-2-NEXT: LineNumber: 36
@@ -83,26 +83,81 @@ class X {
// CHECK-2-NEXT: Parents:
// CHECK-2-NEXT: - Type: Record
// CHECK-2-NEXT: Name: 'E'
-// CHECK-2-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-2-NEXT: VirtualParents:
// CHECK-2-NEXT: - Type: Record
// CHECK-2-NEXT: Name: 'D'
-// CHECK-2-NEXT: USR: '0921737541208B8FA9BB42B60F78AC1D779AA054'
+// CHECK-2-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-2-NEXT: ...
// RUN: cat %t/docs/./E.yaml | FileCheck %s --check-prefix CHECK-3
// CHECK-3: ---
-// CHECK-3-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-3-NEXT: Name: 'E'
// CHECK-3-NEXT: DefLocation:
// CHECK-3-NEXT: LineNumber: 25
// CHECK-3-NEXT: Filename: 'test'
// CHECK-3-NEXT: TagType: Class
+// CHECK-3-NEXT: ChildFunctions:
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 27
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: '~E'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 28
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
+// CHECK-3-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: Name: 'ProtectedMethod'
+// CHECK-3-NEXT: Namespace:
+// CHECK-3-NEXT: - Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: DefLocation:
+// CHECK-3-NEXT: LineNumber: 34
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: Location:
+// CHECK-3-NEXT: - LineNumber: 31
+// CHECK-3-NEXT: Filename: 'test'
+// CHECK-3-NEXT: IsMethod: true
+// CHECK-3-NEXT: Parent:
+// CHECK-3-NEXT: Type: Record
+// CHECK-3-NEXT: Name: 'E'
+// CHECK-3-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-3-NEXT: ReturnType:
+// CHECK-3-NEXT: Type:
+// CHECK-3-NEXT: Name: 'void'
// CHECK-3-NEXT: ...
// RUN: cat %t/docs/./D.yaml | FileCheck %s --check-prefix CHECK-4
// CHECK-4: ---
-// CHECK-4-NEXT: USR: '0921737541208B8FA9BB42B60F78AC1D779AA054'
+// CHECK-4-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-4-NEXT: Name: 'D'
// CHECK-4-NEXT: DefLocation:
// CHECK-4-NEXT: LineNumber: 23
@@ -110,143 +165,72 @@ class X {
// CHECK-4-NEXT: TagType: Class
// CHECK-4-NEXT: ...
-// RUN: cat %t/docs/./B.yaml | FileCheck %s --check-prefix CHECK-5
+// RUN: cat %t/docs/./X.yaml | FileCheck %s --check-prefix CHECK-5
// CHECK-5: ---
-// CHECK-5-NEXT: USR: 'FC07BD34D5E77782C263FA944447929EA8753740'
-// CHECK-5-NEXT: Name: 'B'
+// CHECK-5-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-5-NEXT: Name: 'X'
// CHECK-5-NEXT: DefLocation:
-// CHECK-5-NEXT: LineNumber: 17
+// CHECK-5-NEXT: LineNumber: 38
// CHECK-5-NEXT: Filename: 'test'
-// CHECK-5-NEXT: Members:
-// CHECK-5-NEXT: - 'X'
-// CHECK-5-NEXT: - 'Y'
+// CHECK-5-NEXT: TagType: Class
// CHECK-5-NEXT: ...
-// RUN: cat %t/docs/./X.yaml | FileCheck %s --check-prefix CHECK-6
+// RUN: cat %t/docs/./GlobalNamespace.yaml | FileCheck %s --check-prefix CHECK-6
// CHECK-6: ---
-// CHECK-6-NEXT: USR: 'CA7C7935730B5EACD25F080E9C83FA087CCDC75E'
-// CHECK-6-NEXT: Name: 'X'
-// CHECK-6-NEXT: DefLocation:
-// CHECK-6-NEXT: LineNumber: 38
-// CHECK-6-NEXT: Filename: 'test'
-// CHECK-6-NEXT: TagType: Class
+// CHECK-6-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: ChildFunctions:
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'H'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 11
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: ReturnType:
+// CHECK-6-NEXT: Type:
+// CHECK-6-NEXT: Name: 'void'
+// CHECK-6-NEXT: ChildEnums:
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'B'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 17
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: Members:
+// CHECK-6-NEXT: - 'X'
+// CHECK-6-NEXT: - 'Y'
+// CHECK-6-NEXT: - USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-6-NEXT: Name: 'Bc'
+// CHECK-6-NEXT: DefLocation:
+// CHECK-6-NEXT: LineNumber: 19
+// CHECK-6-NEXT: Filename: 'test'
+// CHECK-6-NEXT: Scoped: true
+// CHECK-6-NEXT: Members:
+// CHECK-6-NEXT: - 'A'
+// CHECK-6-NEXT: - 'B'
// CHECK-6-NEXT: ...
-// RUN: cat %t/docs/./H.yaml | FileCheck %s --check-prefix CHECK-7
+// RUN: cat %t/docs/H/I.yaml | FileCheck %s --check-prefix CHECK-7
// CHECK-7: ---
-// CHECK-7-NEXT: USR: 'B6AC4C5C9F2EA3F2B3ECE1A33D349F4EE502B24E'
-// CHECK-7-NEXT: Name: 'H'
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-7-NEXT: Name: 'I'
+// CHECK-7-NEXT: Namespace:
+// CHECK-7-NEXT: - Type: Function
+// CHECK-7-NEXT: Name: 'H'
+// CHECK-7-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-7-NEXT: DefLocation:
-// CHECK-7-NEXT: LineNumber: 11
+// CHECK-7-NEXT: LineNumber: 12
// CHECK-7-NEXT: Filename: 'test'
-// CHECK-7-NEXT: ReturnType:
-// CHECK-7-NEXT: Type:
-// CHECK-7-NEXT: Name: 'void'
+// CHECK-7-NEXT: TagType: Class
// CHECK-7-NEXT: ...
-// RUN: cat %t/docs/./Bc.yaml | FileCheck %s --check-prefix CHECK-8
+// RUN: cat %t/docs/X/Y.yaml | FileCheck %s --check-prefix CHECK-8
// CHECK-8: ---
-// CHECK-8-NEXT: USR: '1E3438A08BA22025C0B46289FF0686F92C8924C5'
-// CHECK-8-NEXT: Name: 'Bc'
+// CHECK-8-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
+// CHECK-8-NEXT: Name: 'Y'
+// CHECK-8-NEXT: Namespace:
+// CHECK-8-NEXT: - Type: Record
+// CHECK-8-NEXT: Name: 'X'
+// CHECK-8-NEXT: USR: '{{[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]}}'
// CHECK-8-NEXT: DefLocation:
-// CHECK-8-NEXT: LineNumber: 19
+// CHECK-8-NEXT: LineNumber: 39
// CHECK-8-NEXT: Filename: 'test'
-// CHECK-8-NEXT: Scoped: true
-// CHECK-8-NEXT: Members:
-// CHECK-8-NEXT: - 'A'
-// CHECK-8-NEXT: - 'B'
+// CHECK-8-NEXT: TagType: Class
// CHECK-8-NEXT: ...
-
-// RUN: cat %t/docs/H/I.yaml | FileCheck %s --check-prefix CHECK-9
-// CHECK-9: ---
-// CHECK-9-NEXT: USR: '3FB542274573CAEAD54CEBFFCAEE3D77FB9713D8'
-// CHECK-9-NEXT: Name: 'I'
-// CHECK-9-NEXT: Namespace:
-// CHECK-9-NEXT: - Type: Function
-// CHECK-9-NEXT: Name: 'H'
-// CHECK-9-NEXT: USR: 'B6AC4C5C9F2EA3F2B3ECE1A33D349F4EE502B24E'
-// CHECK-9-NEXT: DefLocation:
-// CHECK-9-NEXT: LineNumber: 12
-// CHECK-9-NEXT: Filename: 'test'
-// CHECK-9-NEXT: TagType: Class
-// CHECK-9-NEXT: ...
-
-// RUN: cat %t/docs/X/Y.yaml | FileCheck %s --check-prefix CHECK-10
-// CHECK-10: ---
-// CHECK-10-NEXT: USR: '641AB4A3D36399954ACDE29C7A8833032BF40472'
-// CHECK-10-NEXT: Name: 'Y'
-// CHECK-10-NEXT: Namespace:
-// CHECK-10-NEXT: - Type: Record
-// CHECK-10-NEXT: Name: 'X'
-// CHECK-10-NEXT: USR: 'CA7C7935730B5EACD25F080E9C83FA087CCDC75E'
-// CHECK-10-NEXT: DefLocation:
-// CHECK-10-NEXT: LineNumber: 39
-// CHECK-10-NEXT: Filename: 'test'
-// CHECK-10-NEXT: TagType: Class
-// CHECK-10-NEXT: ...
-
-// RUN: cat %t/docs/E/ProtectedMethod.yaml | FileCheck %s --check-prefix CHECK-11
-// CHECK-11: ---
-// CHECK-11-NEXT: USR: '5093D428CDC62096A67547BA52566E4FB9404EEE'
-// CHECK-11-NEXT: Name: 'ProtectedMethod'
-// CHECK-11-NEXT: Namespace:
-// CHECK-11-NEXT: - Type: Record
-// CHECK-11-NEXT: Name: 'E'
-// CHECK-11-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
-// CHECK-11-NEXT: DefLocation:
-// CHECK-11-NEXT: LineNumber: 34
-// CHECK-11-NEXT: Filename: 'test'
-// CHECK-11-NEXT: Location:
-// CHECK-11-NEXT: - LineNumber: 31
-// CHECK-11-NEXT: Filename: 'test'
-// CHECK-11-NEXT: IsMethod: true
-// CHECK-11-NEXT: Parent:
-// CHECK-11-NEXT: Type: Record
-// CHECK-11-NEXT: Name: 'E'
-// CHECK-11-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
-// CHECK-11-NEXT: ReturnType:
-// CHECK-11-NEXT: Type:
-// CHECK-11-NEXT: Name: 'void'
-// CHECK-11-NEXT: ...
-
-// RUN: cat %t/docs/E/E.yaml | FileCheck %s --check-prefix CHECK-12
-// CHECK-12: ---
-// CHECK-12-NEXT: USR: 'DEB4AC1CD9253CD9EF7FBE6BCAC506D77984ABD4'
-// CHECK-12-NEXT: Name: 'E'
-// CHECK-12-NEXT: Namespace:
-// CHECK-12-NEXT: - Type: Record
-// CHECK-12-NEXT: Name: 'E'
-// CHECK-12-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
-// CHECK-12-NEXT: DefLocation:
-// CHECK-12-NEXT: LineNumber: 27
-// CHECK-12-NEXT: Filename: 'test'
-// CHECK-12-NEXT: IsMethod: true
-// CHECK-12-NEXT: Parent:
-// CHECK-12-NEXT: Type: Record
-// CHECK-12-NEXT: Name: 'E'
-// CHECK-12-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
-// CHECK-12-NEXT: ReturnType:
-// CHECK-12-NEXT: Type:
-// CHECK-12-NEXT: Name: 'void'
-// CHECK-12-NEXT: ...
-
-// RUN: cat %t/docs/E/~E.yaml | FileCheck %s --check-prefix CHECK-13
-// CHECK-13: ---
-// CHECK-13-NEXT: USR: 'BD2BDEBD423F80BACCEA75DE6D6622D355FC2D17'
-// CHECK-13-NEXT: Name: '~E'
-// CHECK-13-NEXT: Namespace:
-// CHECK-13-NEXT: - Type: Record
-// CHECK-13-NEXT: Name: 'E'
-// CHECK-13-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
-// CHECK-13-NEXT: DefLocation:
-// CHECK-13-NEXT: LineNumber: 28
-// CHECK-13-NEXT: Filename: 'test'
-// CHECK-13-NEXT: IsMethod: true
-// CHECK-13-NEXT: Parent:
-// CHECK-13-NEXT: Type: Record
-// CHECK-13-NEXT: Name: 'E'
-// CHECK-13-NEXT: USR: '289584A8E0FF4178A794622A547AA622503967A1'
-// CHECK-13-NEXT: ReturnType:
-// CHECK-13-NEXT: Type:
-// CHECK-13-NEXT: Name: 'void'
-// CHECK-13-NEXT: ...
OpenPOWER on IntegriCloud