From 08af5daeba6ad411c5b41738d8bfd08f4461bdcc Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Wed, 8 Sep 2021 10:12:20 +0200 Subject: [PATCH] ir: Fix canonical type propagation cancelling During the canonical type propagation optimization, when the comparison of two type sub-objects fails, we need to cancel the (potential) propagation of the canonical type of the current type sub-object being compared. We were not doing that in return_comparison_result, but were expecting it. Oops. Fixed thus. This helps to fix bug https://bugzilla.redhat.com/show_bug.cgi?id=1951501. * src/abg-ir.cc (return_comparison_result): When the comparison of the current type sub-object fails, clear the potentially propagated canonical type and remove it from the set of types with non confirmed propagated canonical types. Signed-off-by: Dodji Seketeli --- src/abg-ir.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/abg-ir.cc b/src/abg-ir.cc index a12a6955..3ce49e76 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -1005,12 +1005,12 @@ return_comparison_result(T& l, T& r, bool value) { // The right-hand-side operand cannot carry any tentative // canonical type at this point. - type_base* canonical_type = r.get_naked_canonical_type(); - ABG_ASSERT(canonical_type == nullptr); + is_type(&r)->priv_->clear_propagated_canonical_type(); // Reset the marking of the right-hand-side operand as it no // longer carries a tentative canonical type that might be // later cancelled. is_type(&r)->priv_->set_does_not_depend_on_recursive_type(); + env->priv_->remove_from_types_with_non_confirmed_propagated_ct(&r); } } }