[1/3] ir: Disambiguate sorting of array element types

Message ID 87lesk9173.fsf@seketeli.org
State New
Headers
Series Make integral types of same base and size compatible |

Commit Message

Dodji Seketeli July 22, 2022, 11:28 p.m. UTC
  Hello,

When using non-internal pretty representation of array types (e.g, for
sorting of types in a given scope for the purpose of serialization),
some array element types might have the same name, even though they
don't have the same qualified name.  In those cases, the serialized
abixml output is not stable.

This patches uses qualified names for array element names for type
sorting purposes.

However, this patch uncovers a problem that shows up in the tests
outputs for test-abidiff-exit and test-diff-filter, where emitting
qualified names of qualified types shows that there can be redundant
qualifiers in the serialized output.  This issue will be fixed
separately in a later commit.  For now, the output of these tests is
temporarily updated to have the tests pass.

	* src/abg-ir.cc (get_type_representation): In the overload for
	array_type_def, use qualified names for element types.
	* tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt: Adjust.
	* tests/data/test-annotate/test15-pr18892.so.abi: Adjust.
	* tests/data/test-annotate/test17-pr19027.so.abi: Adjust.
	* tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi:
	Adjust.
	* tests/data/test-diff-filter/test-PR26739-2-report-0.txt: Adjust.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
Applied to master.
---
 src/abg-ir.cc                                 |   2 +-
 .../qualifier-typedef-array-report-1.txt      |  20 ++--
 .../data/test-annotate/test15-pr18892.so.abi  |  32 +++---
 .../data/test-annotate/test17-pr19027.so.abi  | 104 +++++++++---------
 ...19-pr19023-libtcmalloc_and_profiler.so.abi |  14 +--
 .../test-PR26739-2-report-0.txt               |   2 +-
 6 files changed, 87 insertions(+), 87 deletions(-)
  

Patch

diff --git a/src/abg-ir.cc b/src/abg-ir.cc
index 07736db9..5c1ac35b 100644
--- a/src/abg-ir.cc
+++ b/src/abg-ir.cc
@@ -17066,7 +17066,7 @@  get_type_representation(const array_type_def& a, bool internal)
 	  + a.get_subrange_representation();
       else
 	r = (e_type
-	     ? get_type_name(e_type, /*qualified=*/false, /*internal=*/false)
+	     ? get_type_name(e_type, /*qualified=*/true, /*internal=*/false)
 	     : string("void"))
 	  + a.get_subrange_representation();
     }
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
index e9bf3d46..13949efc 100644
--- a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
@@ -50,36 +50,36 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             entity changed from 'typedef C' to compatible type 'const volatile void* const[7]'
               array element type 'void* const' changed:
                 'void* const' changed to 'const volatile void* const'
-              type name changed from 'void* const[7]' to 'volatile void* const[7]'
+              type name changed from 'void* const[7]' to 'const volatile void* const[7]'
               type size hasn't changed
           type of 'C r_c' changed:
-            entity changed from 'typedef C' to compatible type 'restrict void* const[7]'
+            entity changed from 'typedef C' to compatible type 'restrict const void* const[7]'
               array element type 'void* const' changed:
                 'void* const' changed to 'restrict const void* const'
-              type name changed from 'void* const[7]' to 'restrict void* const[7]'
+              type name changed from 'void* const[7]' to 'restrict const void* const[7]'
               type size hasn't changed
           type of 'D v_d' changed:
             entity changed from 'typedef D' to compatible type 'const volatile void* const[7]'
               array element type 'void* const' changed:
                 'void* const' changed to 'const volatile void* const'
-              type name changed from 'void* const[7]' to 'volatile void* const[7]'
+              type name changed from 'void* const[7]' to 'const volatile void* const[7]'
               type size hasn't changed
           type of 'D r_d' changed:
-            entity changed from 'typedef D' to compatible type 'restrict void* const[7]'
+            entity changed from 'typedef D' to compatible type 'restrict const void* const[7]'
               array element type 'void* const' changed:
                 'void* const' changed to 'restrict const void* const'
-              type name changed from 'void* const[7]' to 'restrict void* const[7]'
+              type name changed from 'void* const[7]' to 'restrict const void* const[7]'
               type size hasn't changed
           type of 'E r_e' changed:
-            entity changed from 'typedef E' to compatible type 'restrict const volatile void* const[7]'
+            entity changed from 'typedef E' to compatible type 'restrict const volatile volatile void* const[7]'
               array element type 'const volatile void* const' changed:
                 'const volatile void* const' changed to 'restrict const volatile volatile void* const'
-              type name changed from 'volatile void* const[7]' to 'restrict const volatile void* const[7]'
+              type name changed from 'const volatile void* const[7]' to 'restrict const volatile volatile void* const[7]'
               type size hasn't changed
           type of 'F r_f' changed:
-            entity changed from 'typedef F' to compatible type 'restrict const volatile void* const[7]'
+            entity changed from 'typedef F' to compatible type 'restrict const volatile volatile void* const[7]'
               array element type 'const volatile void* const' changed:
                 'const volatile void* const' changed to 'restrict const volatile volatile void* const'
-              type name changed from 'volatile void* const[7]' to 'restrict const volatile void* const[7]'
+              type name changed from 'const volatile void* const[7]' to 'restrict const volatile volatile void* const[7]'
               type size hasn't changed
 
diff --git a/tests/data/test-annotate/test15-pr18892.so.abi b/tests/data/test-annotate/test15-pr18892.so.abi
index bbabb567..dbcdb390 100644
--- a/tests/data/test-annotate/test15-pr18892.so.abi
+++ b/tests/data/test-annotate/test15-pr18892.so.abi
@@ -4588,7 +4588,7 @@ 
     </function-type>
   </abi-instr>
   <abi-instr address-size='64' path='../../.././libsanitizer/sanitizer_common/sanitizer_common.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/sanitizer_common' language='LANG_C_plus_plus'>
-    <!-- AddressRange[6] -->
+    <!-- __sanitizer::LoadedModule::AddressRange[6] -->
     <array-type-def dimensions='1' type-id='type-id-121' size-in-bits='768' id='type-id-122'>
       <!-- <anonymous range>[6] -->
       <subrange length='6' type-id='type-id-49' id='type-id-123'/>
@@ -10820,17 +10820,17 @@ 
     </namespace-decl>
   </abi-instr>
   <abi-instr address-size='64' path='../../.././libsanitizer/tsan/tsan_interceptors.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/tsan' language='LANG_C_plus_plus'>
-    <!-- LibCodeRange[128] -->
+    <!-- __sanitizer::LibIgnore::LibCodeRange[128] -->
     <array-type-def dimensions='1' type-id='type-id-361' size-in-bits='16384' id='type-id-362'>
       <!-- <anonymous range>[128] -->
       <subrange length='128' type-id='type-id-49' id='type-id-363'/>
     </array-type-def>
-    <!-- Lib[128] -->
+    <!-- __sanitizer::LibIgnore::Lib[128] -->
     <array-type-def dimensions='1' type-id='type-id-364' size-in-bits='32768' id='type-id-365'>
       <!-- <anonymous range>[128] -->
       <subrange length='128' type-id='type-id-49' id='type-id-363'/>
     </array-type-def>
-    <!-- SignalDesc[64] -->
+    <!-- __tsan::SignalDesc[64] -->
     <array-type-def dimensions='1' type-id='type-id-366' size-in-bits='552960' id='type-id-367'>
       <!-- <anonymous range>[64] -->
       <subrange length='64' type-id='type-id-49' id='type-id-368'/>
@@ -10907,7 +10907,7 @@ 
       <!-- <anonymous range>[4] -->
       <subrange length='4' type-id='type-id-49' id='type-id-388'/>
     </array-type-def>
-    <!-- void*[128] -->
+    <!-- void ()*[128] -->
     <array-type-def dimensions='1' type-id='type-id-153' size-in-bits='8192' id='type-id-389'>
       <!-- <anonymous range>[128] -->
       <subrange length='128' type-id='type-id-49' id='type-id-363'/>
@@ -27650,42 +27650,42 @@ 
   <abi-instr address-size='64' path='../../.././libsanitizer/tsan/tsan_interface_atomic.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/tsan' language='LANG_C_plus_plus'>
     <!-- __int128 -->
     <type-decl name='__int128' size-in-bits='128' id='type-id-1270'/>
-    <!-- SizeClassInfo[53] -->
+    <!-- __sanitizer::SizeClassAllocator32<0ul, 140737488355328ull, 16ul, __sanitizer::SizeClassMap<17ul, 64ul, 14ul>, 24ul, __sanitizer::TwoLevelByteMap<2048ull, 4096ull, __sanitizer::NoOpMapUnmapCallback>, __sanitizer::NoOpMapUnmapCallback>::SizeClassInfo[53] -->
     <array-type-def dimensions='1' type-id='type-id-1271' size-in-bits='27136' id='type-id-1272'>
       <!-- <anonymous range>[53] -->
       <subrange length='53' type-id='type-id-49' id='type-id-1273'/>
     </array-type-def>
-    <!-- PerClass[53] -->
+    <!-- __sanitizer::SizeClassAllocatorLocalCache<__sanitizer::SizeClassAllocator32<0ul, 140737488355328ull, 16ul, __sanitizer::SizeClassMap<17ul, 64ul, 14ul>, 24ul, __sanitizer::TwoLevelByteMap<2048ull, 4096ull, __sanitizer::NoOpMapUnmapCallback>, __sanitizer::NoOpMapUnmapCallback> >::PerClass[53] -->
     <array-type-def dimensions='1' type-id='type-id-185' size-in-bits='440960' id='type-id-189'>
       <!-- <anonymous range>[53] -->
       <subrange length='53' type-id='type-id-49' id='type-id-1273'/>
     </array-type-def>
-    <!-- PerClass[53] -->
+    <!-- __sanitizer::SizeClassAllocatorLocalCache<__sanitizer::SizeClassAllocator64<137438953472000ul, 1099511627776ul, 16ul, __sanitizer::SizeClassMap<17ul, 128ul, 16ul>, __tsan::MapUnmapCallback> >::PerClass[53] -->
     <array-type-def dimensions='1' type-id='type-id-1274' size-in-bits='875136' id='type-id-1275'>
       <!-- <anonymous range>[53] -->
       <subrange length='53' type-id='type-id-49' id='type-id-1273'/>
     </array-type-def>
-    <!-- atomic_uint64_t[4] -->
+    <!-- __sanitizer::atomic_uint64_t[4] -->
     <array-type-def dimensions='1' type-id='type-id-1276' size-in-bits='256' id='type-id-1277'>
       <!-- <anonymous range>[4] -->
       <subrange length='4' type-id='type-id-49' id='type-id-388'/>
     </array-type-def>
-    <!-- atomic_uintptr_t[2048] -->
+    <!-- __sanitizer::atomic_uintptr_t[2048] -->
     <array-type-def dimensions='1' type-id='type-id-1232' size-in-bits='131072' id='type-id-1278'>
       <!-- <anonymous range>[2048] -->
       <subrange length='2048' type-id='type-id-49' id='type-id-1279'/>
     </array-type-def>
-    <!-- MD5Hash[2] -->
+    <!-- __tsan::MD5Hash[2] -->
     <array-type-def dimensions='1' type-id='type-id-1280' size-in-bits='256' id='type-id-1281'>
       <!-- <anonymous range>[2] -->
       <subrange length='2' type-id='type-id-49' id='type-id-1282'/>
     </array-type-def>
-    <!-- Desc[16] -->
+    <!-- __tsan::MutexSet::Desc[16] -->
     <array-type-def dimensions='1' type-id='type-id-1283' size-in-bits='3072' id='type-id-1284'>
       <!-- <anonymous range>[16] -->
       <subrange length='16' type-id='type-id-49' id='type-id-382'/>
     </array-type-def>
-    <!-- Part[1009] -->
+    <!-- __tsan::SyncTab::Part[1009] -->
     <array-type-def dimensions='1' type-id='type-id-1285' size-in-bits='516608' id='type-id-1286'>
       <!-- <anonymous range>[1009] -->
       <subrange length='1009' type-id='type-id-49' id='type-id-1287'/>
@@ -35556,12 +35556,12 @@ 
     </namespace-decl>
   </abi-instr>
   <abi-instr address-size='64' path='../../.././libsanitizer/tsan/tsan_mman.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/tsan' language='LANG_C_plus_plus'>
-    <!-- Header*[262144] -->
+    <!-- __sanitizer::LargeMmapAllocator<__sanitizer::CrashOnMapUnmap>::Header*[262144] -->
     <array-type-def dimensions='1' type-id='type-id-1518' size-in-bits='16777216' id='type-id-1519'>
       <!-- <anonymous range>[262144] -->
       <subrange length='262144' type-id='type-id-49' id='type-id-1520'/>
     </array-type-def>
-    <!-- Header*[262144] -->
+    <!-- __sanitizer::LargeMmapAllocator<__tsan::MapUnmapCallback>::Header*[262144] -->
     <array-type-def dimensions='1' type-id='type-id-1521' size-in-bits='16777216' id='type-id-1522'>
       <!-- <anonymous range>[262144] -->
       <subrange length='262144' type-id='type-id-49' id='type-id-1520'/>
@@ -40807,7 +40807,7 @@ 
     </namespace-decl>
   </abi-instr>
   <abi-instr address-size='64' path='../../.././libsanitizer/tsan/tsan_rtl_thread.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-ImG4Cf/gcc-4.9.2/x86_64-unknown-linux-gnu/libsanitizer/tsan' language='LANG_C_plus_plus'>
-    <!-- TraceHeader[256] -->
+    <!-- __tsan::TraceHeader[256] -->
     <array-type-def dimensions='1' type-id='type-id-1690' size-in-bits='5062656' id='type-id-1691'>
       <!-- <anonymous range>[256] -->
       <subrange length='256' type-id='type-id-49' id='type-id-202'/>
diff --git a/tests/data/test-annotate/test17-pr19027.so.abi b/tests/data/test-annotate/test17-pr19027.so.abi
index a303267b..a9f7b565 100644
--- a/tests/data/test-annotate/test17-pr19027.so.abi
+++ b/tests/data/test-annotate/test17-pr19027.so.abi
@@ -528,7 +528,7 @@ 
       <!-- <anonymous range>[40] -->
       <subrange length='40' type-id='type-id-4' id='type-id-5'/>
     </array-type-def>
-    <!-- hb_user_data_item_t[2] -->
+    <!-- hb_user_data_array_t::hb_user_data_item_t[2] -->
     <array-type-def dimensions='1' type-id='type-id-6' size-in-bits='384' id='type-id-7'>
       <!-- <anonymous range>[2] -->
       <subrange length='2' type-id='type-id-4' id='type-id-8'/>
@@ -3931,12 +3931,12 @@ 
     <typedef-decl name='hb_tag_t' type-id='type-id-100' filepath='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src/hb-common.h' line='91' column='1' id='type-id-185'/>
   </abi-instr>
   <abi-instr address-size='64' path='hb-face.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src' language='LANG_C_plus_plus'>
-    <!-- OffsetTo<OT::OffsetTable, OT::IntType<unsigned int, 4u> >[1] -->
+    <!-- OT::OffsetTo<OT::OffsetTable, OT::IntType<unsigned int, 4u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-186' id='type-id-187'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- TableRecord[1] -->
+    <!-- OT::TableRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-188' id='type-id-189'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
@@ -10736,52 +10736,52 @@ 
     </function-decl>
   </abi-instr>
   <abi-instr address-size='64' path='hb-ot-font.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src' language='LANG_C_plus_plus'>
-    <!-- BYTE[256] -->
+    <!-- OT::BYTE[256] -->
     <array-type-def dimensions='1' type-id='type-id-670' size-in-bits='2048' id='type-id-671'>
       <!-- <anonymous range>[256] -->
       <subrange length='256' type-id='type-id-4' id='type-id-672'/>
     </array-type-def>
-    <!-- CmapSubtableLongGroup[1] -->
+    <!-- OT::CmapSubtableLongGroup[1] -->
     <array-type-def dimensions='1' type-id='type-id-673' id='type-id-674'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- EncodingRecord[1] -->
+    <!-- OT::EncodingRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-675' id='type-id-676'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- IntType<short unsigned int, 2u>[1] -->
+    <!-- OT::IntType<short unsigned int, 2u>[1] -->
     <array-type-def dimensions='1' type-id='type-id-237' id='type-id-677'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- LongMetric[1] -->
+    <!-- OT::LongMetric[1] -->
     <array-type-def dimensions='1' type-id='type-id-678' id='type-id-679'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- SHORT[1] -->
+    <!-- OT::SHORT[1] -->
     <array-type-def dimensions='1' type-id='type-id-573' id='type-id-680'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- USHORT[1] -->
+    <!-- OT::USHORT[1] -->
     <array-type-def dimensions='1' type-id='type-id-371' id='type-id-681'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- UVSMapping[1] -->
+    <!-- OT::UVSMapping[1] -->
     <array-type-def dimensions='1' type-id='type-id-682' id='type-id-683'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- UnicodeValueRange[1] -->
+    <!-- OT::UnicodeValueRange[1] -->
     <array-type-def dimensions='1' type-id='type-id-684' id='type-id-685'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- VariationSelectorRecord[1] -->
+    <!-- OT::VariationSelectorRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-686' id='type-id-687'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
@@ -12894,162 +12894,162 @@ 
     </function-decl>
   </abi-instr>
   <abi-instr address-size='64' path='hb-ot-layout.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src' language='LANG_C_plus_plus'>
-    <!-- EntryExitRecord[1] -->
+    <!-- OT::EntryExitRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-851' id='type-id-852'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- Index[1] -->
+    <!-- OT::Index[1] -->
     <array-type-def dimensions='1' type-id='type-id-853' id='type-id-854'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- IntType<unsigned int, 3u>[1] -->
+    <!-- OT::IntType<unsigned int, 3u>[1] -->
     <array-type-def dimensions='1' type-id='type-id-735' id='type-id-855'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- LookupRecord[1] -->
+    <!-- OT::LookupRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-856' id='type-id-857'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- MarkRecord[1] -->
+    <!-- OT::MarkRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-858' id='type-id-859'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- Offset<OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::Offset<OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-860' id='type-id-861'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Anchor, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::Anchor, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-862' id='type-id-863'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::AnchorMatrix, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::AnchorMatrix, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-864' id='type-id-865'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::ArrayOf<OT::IntType<short unsigned int, 2u>, OT::IntType<short unsigned int, 2u> >, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::ArrayOf<OT::IntType<short unsigned int, 2u>, OT::IntType<short unsigned int, 2u> >, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-866' id='type-id-867'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::CaretValue, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::CaretValue, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-868' id='type-id-869'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::ChainRule, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::ChainRule, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-870' id='type-id-871'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::ChainRuleSet, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::ChainRuleSet, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-872' id='type-id-873'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Coverage, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::Coverage, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-874' id='type-id-875'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Coverage, OT::IntType<unsigned int, 4u> >[1] -->
+    <!-- OT::OffsetTo<OT::Coverage, OT::IntType<unsigned int, 4u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-876' id='type-id-877'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::LigGlyph, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::LigGlyph, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-878' id='type-id-879'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Ligature, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::Ligature, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-880' id='type-id-881'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::LigatureSet, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::LigatureSet, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-882' id='type-id-883'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Lookup, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::Lookup, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-884' id='type-id-885'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::MarkGlyphSets, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-886' id='type-id-887'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::PairSet, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::PairSet, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-888' id='type-id-889'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::PosLookup, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::PosLookup, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-890' id='type-id-891'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::PosLookupSubTable, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::PosLookupSubTable, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-892' id='type-id-893'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Rule, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::Rule, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-894' id='type-id-895'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::RuleSet, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::RuleSet, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-896' id='type-id-897'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::Sequence, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::Sequence, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-898' id='type-id-899'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::SubstLookup, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::SubstLookup, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-900' id='type-id-901'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- OffsetTo<OT::SubstLookupSubTable, OT::IntType<short unsigned int, 2u> >[1] -->
+    <!-- OT::OffsetTo<OT::SubstLookupSubTable, OT::IntType<short unsigned int, 2u> >[1] -->
     <array-type-def dimensions='1' type-id='type-id-902' id='type-id-903'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- RangeRecord[1] -->
+    <!-- OT::RangeRecord[1] -->
     <array-type-def dimensions='1' type-id='type-id-904' id='type-id-905'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- Record<OT::Feature>[1] -->
+    <!-- OT::Record<OT::Feature>[1] -->
     <array-type-def dimensions='1' type-id='type-id-906' id='type-id-907'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- Record<OT::LangSys>[1] -->
+    <!-- OT::Record<OT::LangSys>[1] -->
     <array-type-def dimensions='1' type-id='type-id-908' id='type-id-909'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- Record<OT::Script>[1] -->
+    <!-- OT::Record<OT::Script>[1] -->
     <array-type-def dimensions='1' type-id='type-id-910' id='type-id-911'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
     </array-type-def>
-    <!-- Value[1] -->
+    <!-- OT::Value[1] -->
     <array-type-def dimensions='1' type-id='type-id-912' id='type-id-913'>
       <!-- <anonymous range>[1] -->
       <subrange length='1' type-id='type-id-4' id='type-id-179'/>
@@ -13059,17 +13059,17 @@ 
       <!-- <anonymous range>[2] -->
       <subrange length='2' type-id='type-id-4' id='type-id-8'/>
     </array-type-def>
-    <!-- feature_map_t[8] -->
+    <!-- hb_ot_map_t::feature_map_t[8] -->
     <array-type-def dimensions='1' type-id='type-id-915' size-in-bits='2304' id='type-id-916'>
       <!-- <anonymous range>[8] -->
       <subrange length='8' type-id='type-id-4' id='type-id-63'/>
     </array-type-def>
-    <!-- lookup_map_t[32] -->
+    <!-- hb_ot_map_t::lookup_map_t[32] -->
     <array-type-def dimensions='1' type-id='type-id-917' size-in-bits='2048' id='type-id-918'>
       <!-- <anonymous range>[32] -->
       <subrange length='32' type-id='type-id-4' id='type-id-919'/>
     </array-type-def>
-    <!-- stage_map_t[4] -->
+    <!-- hb_ot_map_t::stage_map_t[4] -->
     <array-type-def dimensions='1' type-id='type-id-920' size-in-bits='512' id='type-id-921'>
       <!-- <anonymous range>[4] -->
       <subrange length='4' type-id='type-id-4' id='type-id-71'/>
@@ -29612,7 +29612,7 @@ 
       </class-decl>
       <!-- typedef OT::USHORT OT::Value -->
       <typedef-decl name='Value' type-id='type-id-371' filepath='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src/hb-ot-layout-gpos-table.hh' line='45' column='1' id='type-id-912'/>
-      <!-- typedef Value[1] OT::ValueRecord -->
+      <!-- typedef OT::Value[1] OT::ValueRecord -->
       <typedef-decl name='ValueRecord' type-id='type-id-913' filepath='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src/hb-ot-layout-gpos-table.hh' line='47' column='1' id='type-id-1849'/>
       <!-- typedef bool (hb_set_t*, const OT::USHORT&, void*)* OT::intersects_func_t -->
       <typedef-decl name='intersects_func_t' type-id='type-id-1399' filepath='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src/hb-ot-layout-gsubgpos-private.hh' line='626' column='1' id='type-id-1885'/>
@@ -30055,12 +30055,12 @@ 
     </function-type>
   </abi-instr>
   <abi-instr address-size='64' path='hb-ot-map.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src' language='LANG_C_plus_plus'>
-    <!-- feature_info_t[32] -->
+    <!-- hb_ot_map_builder_t::feature_info_t[32] -->
     <array-type-def dimensions='1' type-id='type-id-1898' size-in-bits='7168' id='type-id-1899'>
       <!-- <anonymous range>[32] -->
       <subrange length='32' type-id='type-id-4' id='type-id-919'/>
     </array-type-def>
-    <!-- stage_info_t[8] -->
+    <!-- hb_ot_map_builder_t::stage_info_t[8] -->
     <array-type-def dimensions='1' type-id='type-id-1900' size-in-bits='1024' id='type-id-1901'>
       <!-- <anonymous range>[8] -->
       <subrange length='8' type-id='type-id-4' id='type-id-63'/>
@@ -31395,7 +31395,7 @@ 
     </function-decl>
   </abi-instr>
   <abi-instr address-size='64' path='hb-set.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-04g73E/harfbuzz-0.9.37/src' language='LANG_C_plus_plus'>
-    <!-- elt_t[2048] -->
+    <!-- hb_set_t::elt_t[2048] -->
     <array-type-def dimensions='1' type-id='type-id-2025' size-in-bits='65536' id='type-id-2026'>
       <!-- <anonymous range>[2048] -->
       <subrange length='2048' type-id='type-id-4' id='type-id-2027'/>
diff --git a/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi b/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi
index 44e1db28..8cb8aeba 100644
--- a/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi
+++ b/tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi
@@ -2841,7 +2841,7 @@ 
     </function-decl>
   </abi-instr>
   <abi-instr address-size='64' path='src/base/low_level_alloc.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-kFgaKP/gperftools-2.4' language='LANG_C_plus_plus'>
-    <!-- AllocList*[30] -->
+    <!-- low_level_alloc_internal::AllocList*[30] -->
     <array-type-def dimensions='1' type-id='type-id-92' size-in-bits='1920' id='type-id-93'>
       <!-- <anonymous range>[30] -->
       <subrange length='30' type-id='type-id-23' id='type-id-94'/>
@@ -22310,12 +22310,12 @@ 
   <abi-instr address-size='64' path='src/profiledata.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-kFgaKP/gperftools-2.4' language='LANG_C_plus_plus'>
   </abi-instr>
   <abi-instr address-size='64' path='src/profiler.cc' comp-dir-path='/tmp/legendre/spack-stage/spack-stage-kFgaKP/gperftools-2.4' language='LANG_C_plus_plus'>
-    <!-- Slot[64] -->
+    <!-- ProfileData::Entry::Slot[64] -->
     <array-type-def dimensions='1' type-id='type-id-1229' size-in-bits='4096' id='type-id-1230'>
       <!-- <anonymous range>[64] -->
       <subrange length='64' type-id='type-id-23' id='type-id-1231'/>
     </array-type-def>
-    <!-- Entry[4] -->
+    <!-- ProfileData::Entry[4] -->
     <array-type-def dimensions='1' type-id='type-id-1232' size-in-bits='16896' id='type-id-1233'>
       <!-- <anonymous range>[4] -->
       <subrange length='4' type-id='type-id-23' id='type-id-188'/>
@@ -25418,22 +25418,22 @@ 
       <!-- <anonymous range>[88] -->
       <subrange length='88' type-id='type-id-23' id='type-id-1359'/>
     </array-type-def>
-    <!-- TCEntry[64] -->
+    <!-- tcmalloc::CentralFreeList::TCEntry[64] -->
     <array-type-def dimensions='1' type-id='type-id-1361' size-in-bits='8192' id='type-id-1362'>
       <!-- <anonymous range>[64] -->
       <subrange length='64' type-id='type-id-23' id='type-id-1231'/>
     </array-type-def>
-    <!-- CentralFreeListPadded[88] -->
+    <!-- tcmalloc::CentralFreeListPadded[88] -->
     <array-type-def dimensions='1' type-id='type-id-1363' id='type-id-1364'>
       <!-- <anonymous range>[88] -->
       <subrange length='88' type-id='type-id-23' id='type-id-1359'/>
     </array-type-def>
-    <!-- SpanList[128] -->
+    <!-- tcmalloc::PageHeap::SpanList[128] -->
     <array-type-def dimensions='1' type-id='type-id-1365' size-in-bits='98304' id='type-id-1366'>
       <!-- <anonymous range>[128] -->
       <subrange length='128' type-id='type-id-23' id='type-id-1357'/>
     </array-type-def>
-    <!-- FreeList[88] -->
+    <!-- tcmalloc::ThreadCache::FreeList[88] -->
     <array-type-def dimensions='1' type-id='type-id-1367' size-in-bits='16896' id='type-id-1368'>
       <!-- <anonymous range>[88] -->
       <subrange length='88' type-id='type-id-23' id='type-id-1359'/>
diff --git a/tests/data/test-diff-filter/test-PR26739-2-report-0.txt b/tests/data/test-diff-filter/test-PR26739-2-report-0.txt
index a98473b4..999d9614 100644
--- a/tests/data/test-diff-filter/test-PR26739-2-report-0.txt
+++ b/tests/data/test-diff-filter/test-PR26739-2-report-0.txt
@@ -12,6 +12,6 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             entity changed from 'const volatile const int[5]' to compatible type 'typedef array_type1' at test-PR26739-2-v1.c:3:1
               array element type 'const volatile const int' changed:
                 'const volatile const int' changed to 'const int'
-              type name changed from 'volatile const int[5]' to 'const int[5]'
+              type name changed from 'const volatile const int[5]' to 'const int[5]'
               type size hasn't changed