From eafa0974331eb59b8c8163667359e22f0462be61 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Wed, 24 Apr 2019 17:52:39 +0200 Subject: [PATCH] Use canonical types hash maps for type IDs in abixml writer This patch stores canonical types in the hash maps that are used in the abixml writer to compute the type IDs. This limits the possibility that two types that are equivalent (especially when one is a declaration-only class) end-up in the same abixml. * src/abg-writer.cc (write_context::{type_has_existing_id, get_id_for_type}): Save the canonical type of the type in the map, not the type itself. (write_context::{type_is_emitted}): Use the canonical type rather than the type itself. * tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Adjust. Signed-off-by: Dodji Seketeli --- src/abg-writer.cc | 31 +- .../test-read-dwarf/test9-pr18818-clang.so.abi | 3001 ++++++++++---------- 2 files changed, 1525 insertions(+), 1507 deletions(-) diff --git a/src/abg-writer.cc b/src/abg-writer.cc index 724331c..89f0822 100644 --- a/src/abg-writer.cc +++ b/src/abg-writer.cc @@ -265,7 +265,12 @@ public: /// @return true iff type has already been assigned an ID. bool type_has_existing_id(type_base* type) const - {return (m_type_id_map.find(type) != m_type_id_map.end());} + { + type_base *c = type->get_naked_canonical_type(); + if (c == 0) + c = const_cast(type); + return (m_type_id_map.find(c) != m_type_id_map.end()); + } /// Associate a unique id to a given type. For that, put the type /// in a hash table, hashing the type. So if the type has no id @@ -280,14 +285,18 @@ public: /// associated to it, create a new one and return it. Otherwise, /// return the existing id for that type. interned_string - get_id_for_type(type_base* t) const + get_id_for_type(const type_base* t) const { - type_ptr_map::const_iterator it = m_type_id_map.find(t); + type_base *c = t->get_naked_canonical_type(); + if (c == 0) + c = const_cast(t); + + type_ptr_map::const_iterator it = m_type_id_map.find(c); if (it == m_type_id_map.end()) { interned_string id = get_id_manager().get_id_with_prefix("type-id-"); - m_type_id_map[t] = id; + m_type_id_map[c] = id; return id; } return it->second; @@ -503,7 +512,12 @@ public: /// @param t the type to flag. void record_type_as_emitted(const type_base *t) - {m_emitted_type_set.insert(t);} + { + type_base *c = t->get_naked_canonical_type(); + if (c == 0) + c = const_cast(t); + m_emitted_type_set.insert(c); + } /// Test if a given type has been written out to the XML output. /// @@ -513,7 +527,12 @@ public: /// otherwise. bool type_is_emitted(const type_base *t) - {return m_emitted_type_set.find(t) != m_emitted_type_set.end();} + { + type_base *c = t->get_naked_canonical_type(); + if (c == 0) + c = const_cast(t); + return m_emitted_type_set.find(c) != m_emitted_type_set.end(); + } /// Test if a given type has been written out to the XML output. /// diff --git a/tests/data/test-read-dwarf/test9-pr18818-clang.so.abi b/tests/data/test-read-dwarf/test9-pr18818-clang.so.abi index df88919..060f9cc 100644 --- a/tests/data/test-read-dwarf/test9-pr18818-clang.so.abi +++ b/tests/data/test-read-dwarf/test9-pr18818-clang.so.abi @@ -1611,14 +1611,13 @@ - - - - - + + + + - + @@ -1648,9 +1647,9 @@ - + - + @@ -1674,11 +1673,11 @@ - - + + - + @@ -1686,7 +1685,7 @@ - + @@ -1843,10 +1842,10 @@ - + - + @@ -1881,13 +1880,13 @@ - - - - + + + + - + @@ -1900,51 +1899,51 @@ - + - + - - + + - + - - + + - - + + - + - - + + - + - - + + - - + + - + - - + + - - + + @@ -1954,10 +1953,10 @@ - - - - + + + + @@ -1968,7 +1967,7 @@ - + @@ -1980,29 +1979,29 @@ - + - + - + - - + + - + - + - + - + @@ -2011,9 +2010,9 @@ - + - + @@ -2023,752 +2022,752 @@ - + - + - + - - + + - + - + - + - + - + - - + + - - + + - - - + + + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - - + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - + - - - + + + - + - + - + - - + + - + @@ -2776,225 +2775,225 @@ - - - + + + - + + - - + - + - + - + - + - + + + - - - + + + - - - + + + - - - + + + - - - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -3009,8 +3008,8 @@ - - + + @@ -3034,15 +3033,15 @@ - - + + - + - + - + @@ -3050,271 +3049,271 @@ - + - - + + - - - + + + - - - - + + + + - - + + - - + + - + - + - - + + - + - + - + - + - - + + - + - + - - + + - - - + + + - + - - - + + + - - + + - + - - + + - - - + + + - + - - - + + + - - - + + + - - + + - - + + - + - - - + + + - - - + + + - + - - - + + + - + - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - + - + - + - - - + + + - - + + - + - + - - + + - + - + @@ -3323,8 +3322,8 @@ - - + + @@ -3333,22 +3332,22 @@ - + - + - + - + @@ -3356,7 +3355,7 @@ - + @@ -3364,16 +3363,16 @@ - + - + - + @@ -3382,167 +3381,167 @@ - + - + - + - + - + - + - + - + - - + + - - - + + + - - + + - - - + + + - - + + - + - - + + - - + + - - - + + + - - + + - + - + - + - + - - + + - - + + - + - - + + - - + + - - + + @@ -3550,121 +3549,121 @@ - + - + - + - + - + - + - + - - + + - - + + - - + + - + + - - - - + + + - - + + - + - + - + - - + + - + - - + + - - + + - + @@ -3673,184 +3672,184 @@ - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - - + + - - + + - - + + - + - - - + + + - - - + + + - - + + - + - + - - + + - + - + - + - + - + - - - + + + @@ -3858,739 +3857,739 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - - + + - + - + - - + + - + - - + + - - + + - - - + + + - + - + - + - + - + - - + + - + - - + + - - - + + + - - + + - + - - + + - + - - + + - + - - + + - - - + + + - - + + - + - - + + - + - + - + - + - + - + - - + + - - - + + + - - + + - - - + + + - - + + - + - - + + - - + + - - - + + + - - + + - + - + - + - + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + - - - + + + - - - + + + - - - + + + - + - + - + - - - + + + - - - + + + - - + + - + - - - + + + - + - + - - + + - - - + + + - - + + - - + + - + - + - + - - - + + + - + - + - + - - + + - + - + - - + + - + - - - + + + - + - - + + - - - + + + - + - + - - + + - + - + - - + + - + - + @@ -4598,382 +4597,382 @@ - + - + - + - + - + - - - + + + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - - + + - + - - + + - - + + - + - - - + + + - + + - - - - + + + - + + - - - - + + + - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - - - + + + + - + - - - + + + - + - - + + - - + + - - + + - + - - + + @@ -4989,172 +4988,172 @@ - - + + - - - - + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + - - - - - - - + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + - + - + - + - + @@ -5213,7 +5212,7 @@ - + @@ -5229,10 +5228,10 @@ - + - + @@ -5629,19 +5628,19 @@ - + - + - + @@ -5735,8 +5734,8 @@ - - + + @@ -5839,45 +5838,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + @@ -5888,62 +5887,62 @@ - - - - + + + + - + - + - + - + - - + + - - + + - - - + + + - + - + - + - + - + @@ -5952,160 +5951,160 @@ - - - + + + - - + + - - - + + + - + - + - + - + - + - + - + - - + + - - + + - + - + - + + - - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - - + + - - + + - + - - + + @@ -6115,299 +6114,299 @@ - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + - + - + - + - + - + - + + + - + - - - + - - - + + + + + - - - + - + - - + + @@ -6425,15 +6424,15 @@ - - + + - - + + @@ -6442,114 +6441,114 @@ - + - - + + - - - + + + - - + + - - + + - + - + - + - - - + + + - + - + - + - - + + - + - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + @@ -6557,7 +6556,7 @@ - + @@ -6570,27 +6569,27 @@ - + - + - + - + - + - + @@ -6603,16 +6602,16 @@ - + - + - + - + @@ -6620,137 +6619,137 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + @@ -6759,121 +6758,121 @@ - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - + - + - - + + - + - + @@ -6884,75 +6883,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7000,14 +6999,14 @@ - - + + - - + + @@ -7015,12 +7014,12 @@ - - - - + + + + - + @@ -7033,20 +7032,20 @@ - + - - - - - - + + + + + + - + + - -- 2.7.4