From 6e5894f6a2844a96acf78e788c42c181d00694dd Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Fri, 6 Jan 2023 19:00:56 +0800 Subject: [PATCH] Fix the bug that generates multiple definition of references If a type ID is persent in local_to_global_type_id_map, ModuleMerger functions should report that was_newly_added_ = false. Test: ./test.py ; update prebuilts/clang-tools and build Bug: 255702405 Change-Id: I0fbe68ebbc6b8df3ea4ae36a017d0bb61bc7d553 --- vndk/tools/header-checker/src/linker/module_merger.cpp | 4 ++-- .../reference_dumps/arm64/libdiff_multi_definitions.so.lsdump | 2 +- .../arm64/libmerge_multi_definitions.so.lsdump | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vndk/tools/header-checker/src/linker/module_merger.cpp b/vndk/tools/header-checker/src/linker/module_merger.cpp index a57f7ed37..7cba8165e 100644 --- a/vndk/tools/header-checker/src/linker/module_merger.cpp +++ b/vndk/tools/header-checker/src/linker/module_merger.cpp @@ -131,7 +131,7 @@ MergeStatus ModuleMerger::MergeReferencingTypeInternal( // The type was already added to the parent graph. So change the // referenced type to the global type id. references_type->SetReferencedType(local_to_global_it->second.type_id_); - return local_to_global_it->second; + return MergeStatus(false, local_to_global_it->second.type_id_); } // If that did not go through, look at the addend's type_map_ and get the @@ -470,7 +470,7 @@ MergeStatus ModuleMerger::MergeType( // parent graph. This does not add the node itself though. auto type_it = local_to_global_type_id_map->find(addend_node->GetSelfType()); if (type_it != local_to_global_type_id_map->end()) { - return type_it->second; + return MergeStatus(false, type_it->second.type_id_); } MergeStatus merge_status = LookupType( diff --git a/vndk/tools/header-checker/tests/reference_dumps/arm64/libdiff_multi_definitions.so.lsdump b/vndk/tools/header-checker/tests/reference_dumps/arm64/libdiff_multi_definitions.so.lsdump index 08c944f73..2d2b3f60e 100644 --- a/vndk/tools/header-checker/tests/reference_dumps/arm64/libdiff_multi_definitions.so.lsdump +++ b/vndk/tools/header-checker/tests/reference_dumps/arm64/libdiff_multi_definitions.so.lsdump @@ -69,7 +69,7 @@ "parameters" : [ { - "referenced_type" : "_ZTIP18DefinedInOneHeader#ODR:/link_to_def2.h.sdump" + "referenced_type" : "_ZTIP18DefinedInOneHeader" } ], "return_type" : "_ZTIv", diff --git a/vndk/tools/header-checker/tests/reference_dumps/arm64/libmerge_multi_definitions.so.lsdump b/vndk/tools/header-checker/tests/reference_dumps/arm64/libmerge_multi_definitions.so.lsdump index 1c425d715..80abb8cf5 100644 --- a/vndk/tools/header-checker/tests/reference_dumps/arm64/libmerge_multi_definitions.so.lsdump +++ b/vndk/tools/header-checker/tests/reference_dumps/arm64/libmerge_multi_definitions.so.lsdump @@ -69,7 +69,7 @@ "parameters" : [ { - "referenced_type" : "_ZTIP18DefinedInOneHeader#ODR:/def2.h.sdump" + "referenced_type" : "_ZTIP18DefinedInOneHeader" } ], "return_type" : "_ZTIv",