From 5f1945b130f2a4593bb6a93c36ff6e30bdf45cac Mon Sep 17 00:00:00 2001 From: Giuliano Procida Date: Wed, 17 Jun 2020 17:17:20 +0100 Subject: [PATCH] get_canonical_type_for: restore environment better The method type_base::get_canonical_type_for contains some logic which temporarily changes a couple of control flags in the type's environment. It then restores these, but not consistently. This patch ensures the flags are restored unconditionally. * src/abg-ir.cc (get_canonical_type_for): Ensure the do_on_the_fly_canonicalization and decl_only_class_equals_definition flags are restored unconditionally. Signed-off-by: Giuliano Procida Signed-off-by: Dodji Seketeli --- src/abg-ir.cc | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/abg-ir.cc b/src/abg-ir.cc index da3716d5..4813035e 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -11913,26 +11913,19 @@ type_base::get_canonical_type_for(type_base_sptr t) // Compare types by considering that decl-only classes don't // equal their definition. env->decl_only_class_equals_definition(false); - if (types_defined_same_linux_kernel_corpus_public(**it, *t)) - { - result = *it; - break; - } - if (*it == t) + bool equal = types_defined_same_linux_kernel_corpus_public(**it, *t) + || *it == t; + // Restore the state of the on-the-fly-canonicalization and + // the decl-only-class-being-equal-to-a-matching-definition + // flags. + env->do_on_the_fly_canonicalization(false); + env->decl_only_class_equals_definition + (saved_decl_only_class_equals_definition); + if (equal) { - // Restore the state of the on-the-fly-canonicalization - // and the - // decl-only-class-being-equal-to-a-matching-definition - // flags, as we are getting out of the loop. - env->do_on_the_fly_canonicalization(false); - env->decl_only_class_equals_definition - (saved_decl_only_class_equals_definition); result = *it; break; } - env->do_on_the_fly_canonicalization(false); - env->decl_only_class_equals_definition - (saved_decl_only_class_equals_definition); } if (!result) { -- 2.43.5