Merge "Use filegroup for notice files."
diff --git a/vndk/tools/header-checker/tests/gen_all.py b/vndk/tools/header-checker/tests/gen_all.py
index 78ba2b3..9bb62e9 100755
--- a/vndk/tools/header-checker/tests/gen_all.py
+++ b/vndk/tools/header-checker/tests/gen_all.py
@@ -20,10 +20,9 @@
 
 def make_and_copy_reference_dumps(module, default_cflags=[],
                                   reference_dump_dir=REFERENCE_DUMP_DIR):
-    lsdump_content = module.make_lsdump(default_cflags)
-    return copy_reference_dump_content(module.get_name(), lsdump_content,
-                                       reference_dump_dir, '',
-                                       module.get_arch())
+    lsdump_content = module.make_dump(default_cflags)
+    return copy_reference_dump_content(module.get_dump_name(), lsdump_content,
+                                       reference_dump_dir, '', module.arch)
 
 def main():
     patt = re.compile(
diff --git a/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h b/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h
new file mode 100644
index 0000000..6aaec0f
--- /dev/null
+++ b/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h
@@ -0,0 +1,22 @@
+#ifndef KNOWN_ISSUES_H_
+#define KNOWN_ISSUES_H_
+
+// header-abi-dumper is unable to output the following types correctly.
+
+// template<int I> struct NonTypeTemplate;
+extern NonTypeTemplate<1> non_type_template;
+
+// namespace namespace1{
+// template<typename T> class UsingTemplate;
+// }
+using namespace1::UsingTemplate;
+extern UsingTemplate<float> *using_template;
+
+// #define STDCALL __stdcall
+STDCALL return_type function_with_calling_convention();
+
+// class ClassInNameSpace;
+template <typename T> class ClassTemplate;
+extern ClassTemplate<::ClassInNameSpace> template_arg_in_namespace;
+
+#endif  // KNOWN_ISSUES_H_
diff --git a/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h b/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h
new file mode 100644
index 0000000..30a11bd
--- /dev/null
+++ b/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h
@@ -0,0 +1,27 @@
+#ifndef UNDECLARED_TYPES_H_
+#define UNDECLARED_TYPES_H_
+
+using ::namespace_a::A;
+typedef const namespace_b::B *B;
+using C = namespace_c::C[];
+
+extern A a;
+extern namespace_b::template_b<B> b;
+extern const decltype(b) c;
+
+inline A &inline_function(template_c<template_d<C>> d) {
+  LocalVar e;
+  return FunctionCall(d, e);
+}
+
+class InvalidClass {
+  A member;
+
+  D member_function(E);
+  virtual void virtual_function(float);
+};
+
+#define DECLARE_VARIABLE extern TemplateInMacro<F> *template_in_macro
+DECLARE_VARIABLE;
+
+#endif  // UNDECLARED_TYPES_H_
diff --git a/vndk/tools/header-checker/tests/module.py b/vndk/tools/header-checker/tests/module.py
index df2cb1f..e25aa5c 100755
--- a/vndk/tools/header-checker/tests/module.py
+++ b/vndk/tools/header-checker/tests/module.py
@@ -8,6 +8,7 @@
 import_path = os.path.abspath(os.path.join(import_path, 'utils'))
 sys.path.insert(1, import_path)
 
+from utils import run_header_abi_dumper
 from utils import run_header_abi_dumper_on_file
 from utils import run_header_abi_linker
 from utils import TARGET_ARCHS
@@ -36,55 +37,91 @@
         abs_paths.append(relative_to_abs_path(relative_path))
     return abs_paths
 
+
 class Module(object):
-    def __init__(self, name, arch, srcs, version_script, cflags,
-                 export_include_dirs, api, dumper_flags=[], linker_flags=[]):
+    def __init__(self, name, arch, cflags, export_include_dirs):
         self.name = name
         self.arch = arch
-        self.srcs = relative_to_abs_path_list(srcs)
-        self.version_script = relative_to_abs_path(version_script)
         self.cflags = cflags
         self.arch_cflags = ['']
         if self.arch != '':
             self.arch_cflags = ARCH_TARGET_CFLAGS.get(self.arch)
         self.export_include_dirs = relative_to_abs_path_list(export_include_dirs)
+
+    def get_dump_name(self):
+        """Returns the module name followed by file extension."""
+        raise NotImplementedError()
+
+    def make_dump(self, default_cflags):
+        """Returns the dump content as a string."""
+        raise NotImplementedError()
+
+    def mutate_for_arch(self, target_arch):
+        """Returns a clone of this instance with arch=target_arch."""
+        raise NotImplementedError()
+
+    def mutate_for_all_arches(self):
+        modules = []
+        for target_arch in TARGET_ARCHS:
+            modules.append(self.mutate_for_arch(target_arch))
+        return modules
+
+    @staticmethod
+    def get_test_modules():
+        modules = []
+        for module in TEST_MODULES.values():
+            if module.arch == '':
+                modules += module.mutate_for_all_arches()
+        return modules
+
+    @staticmethod
+    def get_test_module_by_name(name):
+        return TEST_MODULES.get(name)
+
+
+class SdumpModule(Module):
+    def __init__(self, name, src, export_include_dirs=tuple(), cflags=tuple(),
+                 arch='', dumper_flags=tuple()):
+        super(SdumpModule, self).__init__(name, arch, cflags,
+                                          export_include_dirs)
+        self.src = relative_to_abs_path(src)
+        self.dumper_flags = dumper_flags
+
+    def get_dump_name(self):
+        return self.name + '.sdump'
+
+    def make_dump(self, default_cflags):
+        return run_header_abi_dumper(
+            self.src, remove_absolute_paths=True, cflags=self.cflags,
+            export_include_dirs=self.export_include_dirs,
+            flags=self.dumper_flags)
+
+    def mutate_for_arch(self, target_arch):
+        return SdumpModule(self.name, self.src, self.export_include_dirs,
+                           self.cflags, target_arch, self.dumper_flags)
+
+
+class LsdumpModule(Module):
+    def __init__(self, name, arch, srcs, version_script, cflags,
+                 export_include_dirs, api, dumper_flags=tuple(),
+                 linker_flags=tuple()):
+        super(LsdumpModule, self).__init__(name, arch, cflags,
+                                           export_include_dirs)
+        self.srcs = relative_to_abs_path_list(srcs)
+        self.version_script = relative_to_abs_path(version_script)
         self.api = api
         self.dumper_flags = dumper_flags
         self.linker_flags = linker_flags
 
-    def get_name(self):
-        return self.name
+    def get_dump_name(self):
+        return self.name + SOURCE_ABI_DUMP_EXT
 
-    def get_arch(self):
-        return self.arch
-
-    def get_srcs(self):
-        return self.srcs
-
-    def get_export_include_dirs(self):
-        return self.export_include_dirs
-
-    def get_cflags(self):
-        return self.cflags
-
-    def get_version_script(self):
-        return self.version_script
-
-    def get_api(self):
-        return self.api
-
-    def get_dumper_flags(self):
-        return self.dumper_flags
-
-    def get_linker_flags(self):
-        return self.linker_flags
-
-    def make_lsdump(self, default_cflags):
+    def make_dump(self, default_cflags):
         """ For each source file, produce a .sdump file, and link them to form
             an lsump file"""
         dumps_to_link = []
         with tempfile.TemporaryDirectory() as tmp:
-            output_lsdump = os.path.join(tmp, self.name) + SOURCE_ABI_DUMP_EXT
+            output_lsdump = os.path.join(tmp, self.get_dump_name())
             for src in self.srcs:
                 output_path = os.path.join(tmp, os.path.basename(src)) + '.sdump'
                 dumps_to_link.append(output_path)
@@ -96,40 +133,25 @@
                                          self.version_script, self.api,
                                          self.arch, self.linker_flags)
 
-    @staticmethod
-    def mutate_module_for_arch(module, target_arch):
-        name = module.get_name()
-        srcs = module.get_srcs()
-        version_script = module.get_version_script()
-        cflags = module.get_cflags()
-        export_include_dirs = module.get_export_include_dirs()
-        api = module.get_api()
-        dumper_flags = module.get_dumper_flags()
-        linker_flags = module.get_linker_flags()
-        return Module(name, target_arch, srcs, version_script, cflags,
-                      export_include_dirs, api, dumper_flags, linker_flags)
+    def mutate_for_arch(self, target_arch):
+        return LsdumpModule(self.name, target_arch, self.srcs,
+                            self.version_script, self.cflags,
+                            self.export_include_dirs, self.api,
+                            self.dumper_flags, self.linker_flags)
 
-    @staticmethod
-    def mutate_module_for_all_arches(module):
-        modules = []
-        for target_arch in TARGET_ARCHS:
-            modules.append(Module.mutate_module_for_arch(module, target_arch))
-        return modules
-
-    @staticmethod
-    def get_test_modules():
-        modules = []
-        for module in TEST_MODULES.values():
-            if module.get_arch() == '':
-                modules += Module.mutate_module_for_all_arches(module)
-        return modules
-
-    @staticmethod
-    def get_test_module_by_name(name):
-        return TEST_MODULES[name]
 
 TEST_MODULES = [
-    Module(
+    SdumpModule(
+        name='undeclared_types.h',
+        src='integration/cpp/header/undeclared_types.h',
+        arch='',
+        dumper_flags=['-suppress-errors', '-output-format', 'Json']),
+    SdumpModule(
+        name='known_issues.h',
+        src='integration/cpp/header/known_issues.h',
+        arch='',
+        dumper_flags=['-suppress-errors', '-output-format', 'Json']),
+    LsdumpModule(
         name='libc_and_cpp',
         srcs=[
             'integration/c_and_cpp/source1.cpp',
@@ -141,7 +163,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libc_and_cpp_with_opaque_ptr_a',
         srcs=[
             'integration/c_and_cpp/source1.cpp',
@@ -153,7 +175,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libc_and_cpp_with_opaque_ptr_b',
         srcs=[
             'integration/c_and_cpp/source1.cpp',
@@ -165,7 +187,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libc_and_cpp_with_unused_struct',
         srcs=[
             'integration/c_and_cpp/source1.cpp',
@@ -177,7 +199,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libc_and_cpp_with_unused_cstruct',
         srcs=[
             'integration/c_and_cpp/source1.cpp',
@@ -189,7 +211,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -202,7 +224,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_odr',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -215,7 +237,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_add_function',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -228,7 +250,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_add_function_and_unexported_elf',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -241,7 +263,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_change_function_access',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -254,7 +276,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_add_global_variable',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -267,7 +289,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_add_global_variable_private',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -280,7 +302,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_return_type_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -293,7 +315,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_parameter_type_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -306,7 +328,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_vtable_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -319,7 +341,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_member_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -332,7 +354,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_member_fake_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -345,7 +367,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_member_cv_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -358,7 +380,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_change_member_access',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -371,7 +393,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_member_integral_type_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -384,7 +406,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_enum_diff',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -397,7 +419,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_enum_extended',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -410,7 +432,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_unreferenced_elf_symbol_removed',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -423,7 +445,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libreproducability',
         srcs=['integration/c_and_cpp/reproducability.c'],
         version_script='integration/c_and_cpp/repro_map.txt',
@@ -432,7 +454,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_member_name_changed',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -445,7 +467,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_function_pointer',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -458,7 +480,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_function_pointer_parameter_added',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -472,7 +494,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_internal_public_struct',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -486,7 +508,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_internal_private_struct',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -499,7 +521,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_inheritance_type_changed',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
@@ -512,7 +534,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libpure_virtual_function',
         srcs=['integration/cpp/pure_virtual/pure_virtual_function.cpp'],
         export_include_dirs=['integration/cpp/pure_virtual/include'],
@@ -521,7 +543,7 @@
         arch='',
         api='current',
     ),
-    Module(
+    LsdumpModule(
         name='libgolden_cpp_json',
         srcs=[
             'integration/cpp/gold/golden_1.cpp',
diff --git a/vndk/tools/header-checker/tests/reference_dumps/arm/known_issues.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/arm/known_issues.h.sdump
new file mode 100644
index 0000000..482c1b2
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/arm/known_issues.h.sdump
@@ -0,0 +1,46 @@
+{
+ "array_types" : [],
+ "builtin_types" :
+ [
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "int",
+   "name" : "int",
+   "referenced_type" : "type-1",
+   "self_type" : "type-1",
+   "size" : 4
+  }
+ ],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" : [],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "non_type_template",
+   "name" : "non_type_template",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "return_type",
+   "name" : "return_type",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "template_arg_in_namespace",
+   "name" : "template_arg_in_namespace",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  }
+ ],
+ "lvalue_reference_types" : [],
+ "pointer_types" : [],
+ "qualified_types" : [],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/arm/undeclared_types.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/arm/undeclared_types.h.sdump
new file mode 100644
index 0000000..ff0ffb7
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/arm/undeclared_types.h.sdump
@@ -0,0 +1,113 @@
+{
+ "array_types" : [],
+ "builtin_types" : [],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" :
+ [
+  {
+   "function_name" : "inline_function",
+   "linker_set_key" : "_Z15inline_function10template_cIJ10template_dIJA_N11namespace_c1CEEEEE",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "type-5"
+    }
+   ],
+   "return_type" : "type-4",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "access" : "private",
+   "function_name" : "InvalidClass::member_function",
+   "linker_set_key" : "_ZN12InvalidClass15member_functionE1E",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "type-8"
+    },
+    {
+     "referenced_type" : "type-9"
+    }
+   ],
+   "return_type" : "type-6",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "a",
+   "name" : "a",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "b",
+   "name" : "b",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "c",
+   "name" : "c",
+   "referenced_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "template_in_macro",
+   "name" : "template_in_macro",
+   "referenced_type" : "type-11",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "lvalue_reference_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "namespace_a::A &",
+   "name" : "namespace_a::A &",
+   "referenced_type" : "type-1",
+   "self_type" : "type-4",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "pointer_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "InvalidClass *",
+   "name" : "InvalidClass *",
+   "referenced_type" : "type-7",
+   "self_type" : "type-8",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "alignment" : 8,
+   "linker_set_key" : "TemplateInMacro<F> *",
+   "name" : "TemplateInMacro<F> *",
+   "referenced_type" : "type-10",
+   "self_type" : "type-11",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "qualified_types" :
+ [
+  {
+   "is_const" : true,
+   "linker_set_key" : "const namespace_b::template_b<const B *>",
+   "name" : "const namespace_b::template_b<const B *>",
+   "referenced_type" : "type-2",
+   "self_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/arm64/known_issues.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/arm64/known_issues.h.sdump
new file mode 100644
index 0000000..482c1b2
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/arm64/known_issues.h.sdump
@@ -0,0 +1,46 @@
+{
+ "array_types" : [],
+ "builtin_types" :
+ [
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "int",
+   "name" : "int",
+   "referenced_type" : "type-1",
+   "self_type" : "type-1",
+   "size" : 4
+  }
+ ],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" : [],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "non_type_template",
+   "name" : "non_type_template",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "return_type",
+   "name" : "return_type",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "template_arg_in_namespace",
+   "name" : "template_arg_in_namespace",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  }
+ ],
+ "lvalue_reference_types" : [],
+ "pointer_types" : [],
+ "qualified_types" : [],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/arm64/undeclared_types.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/arm64/undeclared_types.h.sdump
new file mode 100644
index 0000000..ff0ffb7
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/arm64/undeclared_types.h.sdump
@@ -0,0 +1,113 @@
+{
+ "array_types" : [],
+ "builtin_types" : [],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" :
+ [
+  {
+   "function_name" : "inline_function",
+   "linker_set_key" : "_Z15inline_function10template_cIJ10template_dIJA_N11namespace_c1CEEEEE",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "type-5"
+    }
+   ],
+   "return_type" : "type-4",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "access" : "private",
+   "function_name" : "InvalidClass::member_function",
+   "linker_set_key" : "_ZN12InvalidClass15member_functionE1E",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "type-8"
+    },
+    {
+     "referenced_type" : "type-9"
+    }
+   ],
+   "return_type" : "type-6",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "a",
+   "name" : "a",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "b",
+   "name" : "b",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "c",
+   "name" : "c",
+   "referenced_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "template_in_macro",
+   "name" : "template_in_macro",
+   "referenced_type" : "type-11",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "lvalue_reference_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "namespace_a::A &",
+   "name" : "namespace_a::A &",
+   "referenced_type" : "type-1",
+   "self_type" : "type-4",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "pointer_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "InvalidClass *",
+   "name" : "InvalidClass *",
+   "referenced_type" : "type-7",
+   "self_type" : "type-8",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "alignment" : 8,
+   "linker_set_key" : "TemplateInMacro<F> *",
+   "name" : "TemplateInMacro<F> *",
+   "referenced_type" : "type-10",
+   "self_type" : "type-11",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "qualified_types" :
+ [
+  {
+   "is_const" : true,
+   "linker_set_key" : "const namespace_b::template_b<const B *>",
+   "name" : "const namespace_b::template_b<const B *>",
+   "referenced_type" : "type-2",
+   "self_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/mips/known_issues.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/mips/known_issues.h.sdump
new file mode 100644
index 0000000..482c1b2
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/mips/known_issues.h.sdump
@@ -0,0 +1,46 @@
+{
+ "array_types" : [],
+ "builtin_types" :
+ [
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "int",
+   "name" : "int",
+   "referenced_type" : "type-1",
+   "self_type" : "type-1",
+   "size" : 4
+  }
+ ],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" : [],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "non_type_template",
+   "name" : "non_type_template",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "return_type",
+   "name" : "return_type",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "template_arg_in_namespace",
+   "name" : "template_arg_in_namespace",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  }
+ ],
+ "lvalue_reference_types" : [],
+ "pointer_types" : [],
+ "qualified_types" : [],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/mips/undeclared_types.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/mips/undeclared_types.h.sdump
new file mode 100644
index 0000000..ff0ffb7
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/mips/undeclared_types.h.sdump
@@ -0,0 +1,113 @@
+{
+ "array_types" : [],
+ "builtin_types" : [],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" :
+ [
+  {
+   "function_name" : "inline_function",
+   "linker_set_key" : "_Z15inline_function10template_cIJ10template_dIJA_N11namespace_c1CEEEEE",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "type-5"
+    }
+   ],
+   "return_type" : "type-4",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "access" : "private",
+   "function_name" : "InvalidClass::member_function",
+   "linker_set_key" : "_ZN12InvalidClass15member_functionE1E",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "type-8"
+    },
+    {
+     "referenced_type" : "type-9"
+    }
+   ],
+   "return_type" : "type-6",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "a",
+   "name" : "a",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "b",
+   "name" : "b",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "c",
+   "name" : "c",
+   "referenced_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "template_in_macro",
+   "name" : "template_in_macro",
+   "referenced_type" : "type-11",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "lvalue_reference_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "namespace_a::A &",
+   "name" : "namespace_a::A &",
+   "referenced_type" : "type-1",
+   "self_type" : "type-4",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "pointer_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "InvalidClass *",
+   "name" : "InvalidClass *",
+   "referenced_type" : "type-7",
+   "self_type" : "type-8",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "alignment" : 8,
+   "linker_set_key" : "TemplateInMacro<F> *",
+   "name" : "TemplateInMacro<F> *",
+   "referenced_type" : "type-10",
+   "self_type" : "type-11",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "qualified_types" :
+ [
+  {
+   "is_const" : true,
+   "linker_set_key" : "const namespace_b::template_b<const B *>",
+   "name" : "const namespace_b::template_b<const B *>",
+   "referenced_type" : "type-2",
+   "self_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/mips64/known_issues.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/mips64/known_issues.h.sdump
new file mode 100644
index 0000000..482c1b2
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/mips64/known_issues.h.sdump
@@ -0,0 +1,46 @@
+{
+ "array_types" : [],
+ "builtin_types" :
+ [
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "int",
+   "name" : "int",
+   "referenced_type" : "type-1",
+   "self_type" : "type-1",
+   "size" : 4
+  }
+ ],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" : [],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "non_type_template",
+   "name" : "non_type_template",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "return_type",
+   "name" : "return_type",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "template_arg_in_namespace",
+   "name" : "template_arg_in_namespace",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  }
+ ],
+ "lvalue_reference_types" : [],
+ "pointer_types" : [],
+ "qualified_types" : [],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/mips64/undeclared_types.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/mips64/undeclared_types.h.sdump
new file mode 100644
index 0000000..ff0ffb7
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/mips64/undeclared_types.h.sdump
@@ -0,0 +1,113 @@
+{
+ "array_types" : [],
+ "builtin_types" : [],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" :
+ [
+  {
+   "function_name" : "inline_function",
+   "linker_set_key" : "_Z15inline_function10template_cIJ10template_dIJA_N11namespace_c1CEEEEE",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "type-5"
+    }
+   ],
+   "return_type" : "type-4",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "access" : "private",
+   "function_name" : "InvalidClass::member_function",
+   "linker_set_key" : "_ZN12InvalidClass15member_functionE1E",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "type-8"
+    },
+    {
+     "referenced_type" : "type-9"
+    }
+   ],
+   "return_type" : "type-6",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "a",
+   "name" : "a",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "b",
+   "name" : "b",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "c",
+   "name" : "c",
+   "referenced_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "template_in_macro",
+   "name" : "template_in_macro",
+   "referenced_type" : "type-11",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "lvalue_reference_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "namespace_a::A &",
+   "name" : "namespace_a::A &",
+   "referenced_type" : "type-1",
+   "self_type" : "type-4",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "pointer_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "InvalidClass *",
+   "name" : "InvalidClass *",
+   "referenced_type" : "type-7",
+   "self_type" : "type-8",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "alignment" : 8,
+   "linker_set_key" : "TemplateInMacro<F> *",
+   "name" : "TemplateInMacro<F> *",
+   "referenced_type" : "type-10",
+   "self_type" : "type-11",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "qualified_types" :
+ [
+  {
+   "is_const" : true,
+   "linker_set_key" : "const namespace_b::template_b<const B *>",
+   "name" : "const namespace_b::template_b<const B *>",
+   "referenced_type" : "type-2",
+   "self_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/x86/known_issues.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/x86/known_issues.h.sdump
new file mode 100644
index 0000000..482c1b2
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/x86/known_issues.h.sdump
@@ -0,0 +1,46 @@
+{
+ "array_types" : [],
+ "builtin_types" :
+ [
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "int",
+   "name" : "int",
+   "referenced_type" : "type-1",
+   "self_type" : "type-1",
+   "size" : 4
+  }
+ ],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" : [],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "non_type_template",
+   "name" : "non_type_template",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "return_type",
+   "name" : "return_type",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "template_arg_in_namespace",
+   "name" : "template_arg_in_namespace",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  }
+ ],
+ "lvalue_reference_types" : [],
+ "pointer_types" : [],
+ "qualified_types" : [],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/x86/undeclared_types.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/x86/undeclared_types.h.sdump
new file mode 100644
index 0000000..ff0ffb7
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/x86/undeclared_types.h.sdump
@@ -0,0 +1,113 @@
+{
+ "array_types" : [],
+ "builtin_types" : [],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" :
+ [
+  {
+   "function_name" : "inline_function",
+   "linker_set_key" : "_Z15inline_function10template_cIJ10template_dIJA_N11namespace_c1CEEEEE",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "type-5"
+    }
+   ],
+   "return_type" : "type-4",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "access" : "private",
+   "function_name" : "InvalidClass::member_function",
+   "linker_set_key" : "_ZN12InvalidClass15member_functionE1E",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "type-8"
+    },
+    {
+     "referenced_type" : "type-9"
+    }
+   ],
+   "return_type" : "type-6",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "a",
+   "name" : "a",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "b",
+   "name" : "b",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "c",
+   "name" : "c",
+   "referenced_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "template_in_macro",
+   "name" : "template_in_macro",
+   "referenced_type" : "type-11",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "lvalue_reference_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "namespace_a::A &",
+   "name" : "namespace_a::A &",
+   "referenced_type" : "type-1",
+   "self_type" : "type-4",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "pointer_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "InvalidClass *",
+   "name" : "InvalidClass *",
+   "referenced_type" : "type-7",
+   "self_type" : "type-8",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "alignment" : 8,
+   "linker_set_key" : "TemplateInMacro<F> *",
+   "name" : "TemplateInMacro<F> *",
+   "referenced_type" : "type-10",
+   "self_type" : "type-11",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "qualified_types" :
+ [
+  {
+   "is_const" : true,
+   "linker_set_key" : "const namespace_b::template_b<const B *>",
+   "name" : "const namespace_b::template_b<const B *>",
+   "referenced_type" : "type-2",
+   "self_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/x86_64/known_issues.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/x86_64/known_issues.h.sdump
new file mode 100644
index 0000000..482c1b2
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/x86_64/known_issues.h.sdump
@@ -0,0 +1,46 @@
+{
+ "array_types" : [],
+ "builtin_types" :
+ [
+  {
+   "alignment" : 4,
+   "is_integral" : true,
+   "linker_set_key" : "int",
+   "name" : "int",
+   "referenced_type" : "type-1",
+   "self_type" : "type-1",
+   "size" : 4
+  }
+ ],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" : [],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "non_type_template",
+   "name" : "non_type_template",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "return_type",
+   "name" : "return_type",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  },
+  {
+   "linker_set_key" : "template_arg_in_namespace",
+   "name" : "template_arg_in_namespace",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/known_issues.h"
+  }
+ ],
+ "lvalue_reference_types" : [],
+ "pointer_types" : [],
+ "qualified_types" : [],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/reference_dumps/x86_64/undeclared_types.h.sdump b/vndk/tools/header-checker/tests/reference_dumps/x86_64/undeclared_types.h.sdump
new file mode 100644
index 0000000..ff0ffb7
--- /dev/null
+++ b/vndk/tools/header-checker/tests/reference_dumps/x86_64/undeclared_types.h.sdump
@@ -0,0 +1,113 @@
+{
+ "array_types" : [],
+ "builtin_types" : [],
+ "elf_functions" : [],
+ "elf_objects" : [],
+ "enum_types" : [],
+ "function_types" : [],
+ "functions" :
+ [
+  {
+   "function_name" : "inline_function",
+   "linker_set_key" : "_Z15inline_function10template_cIJ10template_dIJA_N11namespace_c1CEEEEE",
+   "parameters" :
+   [
+    {
+     "referenced_type" : "type-5"
+    }
+   ],
+   "return_type" : "type-4",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "access" : "private",
+   "function_name" : "InvalidClass::member_function",
+   "linker_set_key" : "_ZN12InvalidClass15member_functionE1E",
+   "parameters" :
+   [
+    {
+     "is_this_ptr" : true,
+     "referenced_type" : "type-8"
+    },
+    {
+     "referenced_type" : "type-9"
+    }
+   ],
+   "return_type" : "type-6",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "global_vars" :
+ [
+  {
+   "linker_set_key" : "a",
+   "name" : "a",
+   "referenced_type" : "type-1",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "b",
+   "name" : "b",
+   "referenced_type" : "type-2",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "c",
+   "name" : "c",
+   "referenced_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "linker_set_key" : "template_in_macro",
+   "name" : "template_in_macro",
+   "referenced_type" : "type-11",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "lvalue_reference_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "namespace_a::A &",
+   "name" : "namespace_a::A &",
+   "referenced_type" : "type-1",
+   "self_type" : "type-4",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "pointer_types" :
+ [
+  {
+   "alignment" : 8,
+   "linker_set_key" : "InvalidClass *",
+   "name" : "InvalidClass *",
+   "referenced_type" : "type-7",
+   "self_type" : "type-8",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  },
+  {
+   "alignment" : 8,
+   "linker_set_key" : "TemplateInMacro<F> *",
+   "name" : "TemplateInMacro<F> *",
+   "referenced_type" : "type-10",
+   "self_type" : "type-11",
+   "size" : 8,
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "qualified_types" :
+ [
+  {
+   "is_const" : true,
+   "linker_set_key" : "const namespace_b::template_b<const B *>",
+   "name" : "const namespace_b::template_b<const B *>",
+   "referenced_type" : "type-2",
+   "self_type" : "type-3",
+   "source_file" : "/development/vndk/tools/header-checker/tests/integration/cpp/header/undeclared_types.h"
+  }
+ ],
+ "record_types" : [],
+ "rvalue_reference_types" : []
+}
diff --git a/vndk/tools/header-checker/tests/test.py b/vndk/tools/header-checker/tests/test.py
index ad2db84..7540bc8 100755
--- a/vndk/tools/header-checker/tests/test.py
+++ b/vndk/tools/header-checker/tests/test.py
@@ -27,12 +27,6 @@
     def setUpClass(cls):
         cls.maxDiff = None
 
-    def get_reference_dump_path(self, name, target_arch):
-        ref_dump_dir = os.path.join(REF_DUMP_DIR, target_arch)
-        ref_dump_path = os.path.join(ref_dump_dir,
-                                     name + SOURCE_ABI_DUMP_EXT)
-        return ref_dump_path
-
     def run_and_compare(self, input_path, expected_path, cflags=[]):
         with open(expected_path, 'r') as f:
             expected_output = f.read()
@@ -62,15 +56,16 @@
                                       'test', target_arch, expected_return_code,
                                       flags)
 
-    def create_ref_dump(self, name, dir_name, target_arch):
-        module_bare = Module.get_test_module_by_name(name)
-        module = Module.mutate_module_for_arch(module_bare, target_arch)
+    def create_ref_dump(self, module_bare, dir_name, target_arch):
+        module = module_bare.mutate_for_arch(target_arch)
         return make_and_copy_reference_dumps(module, [], dir_name)
 
     def get_or_create_ref_dump(self, name, target_arch, dir_name, create):
+        module = Module.get_test_module_by_name(name)
         if create == True:
-            return self.create_ref_dump(name, dir_name, target_arch)
-        return self.get_reference_dump_path(name, target_arch)
+            return self.create_ref_dump(module, dir_name, target_arch)
+        return os.path.join(REF_DUMP_DIR, target_arch,
+                            module.get_dump_name() if module else name)
 
     def prepare_and_run_abi_diff_all_archs(self, old_lib, new_lib,
                                            expected_return_code, flags=[],
@@ -109,6 +104,14 @@
     def test_example3_h(self):
         self.run_and_compare_name_cpp('example3.h')
 
+    def test_undeclared_types_h(self):
+        self.prepare_and_absolute_diff_all_archs(
+            'undeclared_types.h', 'undeclared_types.h')
+
+    def test_known_issues_h(self):
+        self.prepare_and_absolute_diff_all_archs(
+            'known_issues.h', 'known_issues.h')
+
     def test_libc_and_cpp(self):
         self.prepare_and_run_abi_diff_all_archs(
             "libc_and_cpp", "libc_and_cpp", 0)
@@ -211,8 +214,8 @@
 
     def test_libgolden_cpp_fabricated_function_ast_removed_diff(self):
         self.prepare_and_run_abi_diff_all_archs(
-            "libgolden_cpp_fabricated_function_ast_removed", "libgolden_cpp", 0,
-            [], False)
+            "libgolden_cpp_fabricated_function_ast_removed.so.lsdump",
+            "libgolden_cpp", 0, [], False)
 
     def test_libgolden_cpp_member_fake_diff(self):
         self.prepare_and_run_abi_diff_all_archs(
diff --git a/vndk/tools/header-checker/utils/utils.py b/vndk/tools/header-checker/utils/utils.py
index fbccbeb..74b2aec 100644
--- a/vndk/tools/header-checker/utils/utils.py
+++ b/vndk/tools/header-checker/utils/utils.py
@@ -78,14 +78,13 @@
     return reference_dump_path
 
 
-def copy_reference_dump_content(lib_name, output_content,
+def copy_reference_dump_content(file_name, output_content,
                                 reference_dump_dir_stem,
                                 reference_dump_dir_insertion, lib_arch):
     reference_dump_dir = get_reference_dump_dir(reference_dump_dir_stem,
                                                 reference_dump_dir_insertion,
                                                 lib_arch)
-    reference_dump_path = os.path.join(reference_dump_dir,
-                                       lib_name + SOURCE_ABI_DUMP_EXT)
+    reference_dump_path = os.path.join(reference_dump_dir, file_name)
     os.makedirs(os.path.dirname(reference_dump_path), exist_ok=True)
     with open(reference_dump_path, 'w') as f:
         f.write(output_content)
@@ -100,11 +99,12 @@
 
 
 def run_header_abi_dumper(input_path, remove_absolute_paths, cflags=tuple(),
-                          export_include_dirs=EXPORTED_HEADERS_DIR):
+                          export_include_dirs=EXPORTED_HEADERS_DIR,
+                          flags=tuple()):
     with tempfile.TemporaryDirectory() as tmp:
         output_path = os.path.join(tmp, os.path.basename(input_path)) + '.dump'
         run_header_abi_dumper_on_file(input_path, output_path,
-                                      export_include_dirs, cflags)
+                                      export_include_dirs, cflags, flags)
         if remove_absolute_paths:
             return read_output_content(output_path, AOSP_DIR)
         with open(output_path, 'r') as f: