From patchwork Wed Jun 17 16:17:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 39665 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ACF123898514; Wed, 17 Jun 2020 16:17:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ACF123898514 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1592410656; bh=wD4Zxv3Qg/FGLGGUb6TuRNEXVZv/WEPGLm83LSe8Qa8=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:Cc:From; b=wsX+WDyxffm9MsM+3YrBhnhvRnuX1/QeTtynFcnyERHu5VhKzPFeowxBNyf09D2ZB oCm4vmIBaCezL7eIbw+9rNy9NNYbneeW19ld8sWdYUtBxsO5NiHrLWgFEWk5hCDEF0 kfhHxXQQteYLYnlK/zuPKmzzoPGyIhB2oERk3050= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mail-qv1-xf4a.google.com (mail-qv1-xf4a.google.com [IPv6:2607:f8b0:4864:20::f4a]) by sourceware.org (Postfix) with ESMTPS id 5B5BD3898512 for ; Wed, 17 Jun 2020 16:17:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5B5BD3898512 Received: by mail-qv1-xf4a.google.com with SMTP id h30so1949578qva.17 for ; Wed, 17 Jun 2020 09:17:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=wD4Zxv3Qg/FGLGGUb6TuRNEXVZv/WEPGLm83LSe8Qa8=; b=OtVGeP5twjPNmVYUcfdV8W45tb9V70c80795RffmDbTiTRaFFfCsKX0sfrjUCN2DRW 2fribL/B4Rxh6DvDL4kd8P3/aKeaRYHnbhYJBSjkpeLv9dXEZzvfyIzI/+9T3YVnsrkR GKAtROXFRyQoJTPpKX33B/7Kj5sm/iwXIFGNltfJ28rvbuLC4tOEyhqjXs3dlDDZoAT5 ZHwOanonrRCGo3Cko3qQ35xqQ/KLAtvy+5NsiyTq269FBIZuBsKeSOxfAUgbLDzT1Rtv PMVFWFze34SE9zRspC5Dgv704ewHRX+Uz5hjwMgjJ8TG7fFw3HfC3vMeOmSbBTopnLxV ZYnw== X-Gm-Message-State: AOAM5330ve6EhxOlXjkTd+wpW14/BhfOzz5YFh96/bTHmuFLcbLbm8m+ vIMap8fovQEYGWds8ISudymQCGfklfOJPGdQxk6h2lZBVW1OqdT3g7k+ek1kFLZfd4rM5GPH8Ih zwya2ZEbw55oFhg7nG6O705A8l082WIYH1GRhYGgkLZAe2ZYqBVywjqP1YI+23MxnBLMMEok= X-Google-Smtp-Source: ABdhPJxBHHoaBNAF0e8BzydeWpyAkQLKuaSsf106D60bMQ19cdok9AXWYMlzW/uxB1w3DTlx3nnoF8VtVbXpKA== X-Received: by 2002:ad4:4368:: with SMTP id u8mr8164433qvt.227.1592410653778; Wed, 17 Jun 2020 09:17:33 -0700 (PDT) Date: Wed, 17 Jun 2020 17:17:20 +0100 Message-Id: <20200617161720.37446-1-gprocida@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.27.0.290.gba653c62da-goog Subject: [PATCH] get_canonical_type_for: restore environment better To: libabigail@sourceware.org X-Spam-Status: No, score=-23.6 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: Giuliano Procida via Libabigail From: Giuliano Procida Reply-To: Giuliano Procida Cc: kernel-team@android.com, gprocida@google.com Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" 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 --- 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 5e2506a2..f3801d56 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -11912,26 +11912,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) {