From patchwork Thu May 27 08:53:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 43603 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 28B6F383B43B; Thu, 27 May 2021 08:53:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 28B6F383B43B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1622105607; bh=GzWOogOQFLAq2f4/whnSk7mUG2s1sdcWXhsHnUkdpOs=; h=Date:In-Reply-To:References:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:Cc:From; b=i+ELJ+PsReNne7TKk3a7T8aXqnSs0YPdzWZHz5QmZ0KdI6CX/CH8sHGoKQdAM+HKz SeU/2rp9JuDfDtXCBJUxGDjfYVI2d/LHL3gB8HXY2W9thbavGUyPBEeHOvgizMf2BF p2IIQOsWrH1XBn3uEM2ErQo2a7TPxWu2mAaYtpgI= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mail-wm1-x34a.google.com (mail-wm1-x34a.google.com [IPv6:2a00:1450:4864:20::34a]) by sourceware.org (Postfix) with ESMTPS id E69C239540BA for ; Thu, 27 May 2021 08:53:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E69C239540BA Received: by mail-wm1-x34a.google.com with SMTP id x20-20020a1c7c140000b029018f49a7efb7so1248778wmc.1 for ; Thu, 27 May 2021 01:53:24 -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:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=GzWOogOQFLAq2f4/whnSk7mUG2s1sdcWXhsHnUkdpOs=; b=Ie0QIDvxaAbb/VKNF6srQYDrmtgChnY6o5KgUrfQa84/SVaaYh3iZRUEZVgkbmszHe cldp0c6bzT4ql9m4DFyd5HZ7ucQdTMmera/BWDBNC+ypapRus0aW50r1ARD6wnElkdas dCvMmdXZAkj/awhmMgRdJMvkgdz+KNERvqq3fiIuLtB7zzS1Q+u0A/CxVHGVEYXAGHzY JiDf1MrWAPD/MT+d+IsoZVtOGf4hJ8Z442DeghiSfTb1xviofKfAUrsMUigBXe7LEB+I VX9xRG7zldRAeMD+lbRPspLVL9N0auydWSfrkB3mFh28x0QHo4GVd5sD+6RMtfZfSH6y KFlw== X-Gm-Message-State: AOAM533UVLevuuGd/YDF7uapyu328uAzvUAW6qKKHGetgEEkOffR8LT1 jTLhMaah5OPvkgM9TquCawapMeVGEI5jgYAA99AsOTwEnT1iAmDQ50OsnHJpz/6TAKbPk4XPx03 oPwPXCQnxiVuaWrv+nLr2myQDJycORFz6OaG2lJdl3FAr8EEtBbKxj7/G+6eWrqFSkmoufxg= X-Google-Smtp-Source: ABdhPJw5rWqFDChCyG22RjqQYFpldhrrAbRV7Nt42RqeG7daU+tJ37MPaE7BJ1nonlfKtm0DZtOiJlts7mClkA== X-Received: from tef.lon.corp.google.com ([2a00:79e0:d:210:959c:f576:7f09:4ab3]) (user=gprocida job=sendgmr) by 2002:a7b:c154:: with SMTP id z20mr6990119wmi.13.1622105604015; Thu, 27 May 2021 01:53:24 -0700 (PDT) Date: Thu, 27 May 2021 09:53:03 +0100 In-Reply-To: <20210527085305.1400592-1-gprocida@google.com> Message-Id: <20210527085305.1400592-2-gprocida@google.com> Mime-Version: 1.0 References: <20210427112853.1338240-1-gprocida@google.com> <20210527085305.1400592-1-gprocida@google.com> X-Mailer: git-send-email 2.31.1.818.g46aad6cb9e-goog Subject: [PATCH v2 1/3] abg-dwarf-reader: create new corpus unconditionally To: libabigail@sourceware.org X-Spam-Status: No, score=-23.2 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: maennich@google.com, kernel-team@android.com Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" The DWARF reader appears to create a new corpus object only if one is not already present. However, the only case where there can be multiple corpora is when build_corpus_group_from_kernel_dist_under is called and this function clears down the reader context, including the current corpus, between reading ELF objects. So it's clearer to just create a fresh corpus object unconditionally in the DWARF reader. * src/abg-dwarf-reader.cc (read_debug_info_into_corpus): Create new corpus object unconditionally. Signed-off-by: Giuliano Procida --- src/abg-dwarf-reader.cc | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc index a06ca88f..135d33c3 100644 --- a/src/abg-dwarf-reader.cc +++ b/src/abg-dwarf-reader.cc @@ -14243,14 +14243,7 @@ static corpus_sptr read_debug_info_into_corpus(read_context& ctxt) { ctxt.clear_per_corpus_data(); - - if (!ctxt.current_corpus()) - { - corpus_sptr corp (new corpus(ctxt.env(), ctxt.elf_path())); - ctxt.current_corpus(corp); - if (!ctxt.env()) - ctxt.env(corp->get_environment()); - } + ctxt.current_corpus(std::make_shared(ctxt.env(), ctxt.elf_path())); // First set some mundane properties of the corpus gathered from // ELF. From patchwork Thu May 27 08:53:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 43604 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 768CF385040E; Thu, 27 May 2021 08:53:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 768CF385040E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1622105609; bh=za6p4uEv9GKTIUjoIFmby0cpaN1+/Ox6/u7tsR1RrUs=; h=Date:In-Reply-To:References:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:Cc:From; b=e07zC/XwqkID3FPqw03UYzQTXncK4B+Grvky8ETRx8JdaJ1sVOTRA70EkVl8ox+f6 w1eYGX6S372vFMVGL7+6IDFuXzp3lpcU92pG7U7i6Xwb3gHnDSJ4avMjRwkg9q7Npj /avWISTOeBjzVgteQ3tEFUq6wytUwuy0J9ORWpV4= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mail-qt1-x84a.google.com (mail-qt1-x84a.google.com [IPv6:2607:f8b0:4864:20::84a]) by sourceware.org (Postfix) with ESMTPS id AF0BF385040E for ; Thu, 27 May 2021 08:53:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AF0BF385040E Received: by mail-qt1-x84a.google.com with SMTP id h7-20020ac846c70000b0290231af0e7829so2312360qto.7 for ; Thu, 27 May 2021 01:53:26 -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:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=za6p4uEv9GKTIUjoIFmby0cpaN1+/Ox6/u7tsR1RrUs=; b=ad3thUCVQU0ADh9ZyygT3AXB7mQ+vDb0jWeyO75MX58cy6nrl7SrESzqIUTTYaDIN2 LtUELR33JWHKfIjk2vua3BCOKRs4Zffa64NPT2UV04aTPFC5re0/PPOc7l/+2/BM9lTG bt5uN/04QtEXt7erPUJd1H5TOAvtWlRVoLvyDPaWRGtSov5ZgMQTWA2jykCD7mZPAXwy 5hRGH0i+HKNN4donBv9vK7lDxbUIPW/ToxNURnyazryjvijiduyZ8qq+4Jvj7sGYcgMx cnMqyuhRijXl2KirDmY+sSrjLDGVCqR59v+BhPmrja4uI2lXc4wEygJcRhX6jvJDX+SA KpdA== X-Gm-Message-State: AOAM533nzCKFfiOLbTGoCwEsFFAVfAV2OCFG0nwzf5YRAfQGOvIjAJPt NLMG4RqoQlk8+btc4f3QAZ0UDhh/Df368s3lDOw6+SK2ZXBbPD1hSZ6/oy16OekcuuOgaMeCav7 XjBiTs7Prg5gv3ry845rMccMcazjbmMUn6zhv8UucWDkpFs0FKa6V0RFpLTTR9dJF2AxUrd4= X-Google-Smtp-Source: ABdhPJw2D1IvQdVlsie3F83NbSzuYLBdjOalozoIOiIxcdfBjwWcOllJ9cxl15dKbF1/0QpH03TySxsyFiCacg== X-Received: from tef.lon.corp.google.com ([2a00:79e0:d:210:959c:f576:7f09:4ab3]) (user=gprocida job=sendgmr) by 2002:a0c:dd0f:: with SMTP id u15mr2689312qvk.53.1622105606116; Thu, 27 May 2021 01:53:26 -0700 (PDT) Date: Thu, 27 May 2021 09:53:04 +0100 In-Reply-To: <20210527085305.1400592-1-gprocida@google.com> Message-Id: <20210527085305.1400592-3-gprocida@google.com> Mime-Version: 1.0 References: <20210427112853.1338240-1-gprocida@google.com> <20210527085305.1400592-1-gprocida@google.com> X-Mailer: git-send-email 2.31.1.818.g46aad6cb9e-goog Subject: [PATCH v2 2/3] abg-reader: ensure corpus always has a symtab reader To: libabigail@sourceware.org X-Spam-Status: No, score=-22.3 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: maennich@google.com, kernel-team@android.com Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" In the presence of an empty abi-corpus element and with the following change to always allocate a fresh corpus object, such objects can sometimes be left without a symtab reader, instead of inheritng one from the previous corpus. The reader is called to obtain sorted lists of symbols during ABI comparisons. The simplest way to avoid a crash is to maintain the invariant that a reader object is always present. With this change, if there is bad XML preventing symbols from being read, no error is raised as before, but the logic has been tweaked so that abi-instr parsing will nevertheless be attempted. * src/abg-reader.cc (read_symbol_db_from_input): Fix documentation for this function. Allow "successful parsing" to include the case where no symbols were present in the input. (read_corpus_from_input): Unconditionally set a symtab reader on the corpus object. Unconditionally parse the abi-instr of a corpus. Signed-off-by: Giuliano Procida --- src/abg-reader.cc | 59 ++++++++++++++--------------------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/src/abg-reader.cc b/src/abg-reader.cc index 0449718d..9bc43bbf 100644 --- a/src/abg-reader.cc +++ b/src/abg-reader.cc @@ -1608,8 +1608,8 @@ read_translation_unit_from_input(read_context& ctxt) return tu; } -/// Parse the input XML document containing a function symbols -/// or a variable symbol database. +/// Parse the input XML document that may contain function symbol and +/// variable symbol databases. /// /// A function symbols database is an XML element named /// "elf-function-symbols" and a variable symbols database is an XML @@ -1618,12 +1618,11 @@ read_translation_unit_from_input(read_context& ctxt) /// /// @param ctxt the read_context to use for the parsing. /// -/// @param function_symbols is true if this function should look for a -/// function symbols database, false if it should look for a variable -/// symbols database. +/// @param fn_symdb any resulting function symbol database object, if +/// elf-function-symbols was present. /// -/// @param symdb the resulting symbol database object. This is set -/// iff the function return true. +/// @param var_symdb any resulting variable symbol database object, if +/// elf-variable-symbols was present. /// /// @return true upon successful parsing, false otherwise. static bool @@ -1635,8 +1634,6 @@ read_symbol_db_from_input(read_context& ctxt, if (!reader) return false; - bool found = false; - if (!ctxt.get_corpus_node()) for (;;) { @@ -1663,17 +1660,9 @@ read_symbol_db_from_input(read_context& ctxt, return false; if (has_fn_syms) - { - fn_symdb = build_elf_symbol_db(ctxt, node, true); - if (fn_symdb) - found = true; - } + fn_symdb = build_elf_symbol_db(ctxt, node, true); else if (has_var_syms) - { - var_symdb = build_elf_symbol_db(ctxt, node, false); - if (var_symdb) - found = true; - } + var_symdb = build_elf_symbol_db(ctxt, node, false); xmlTextReaderNext(reader.get()); } @@ -1690,22 +1679,16 @@ read_symbol_db_from_input(read_context& ctxt, else break; if (has_fn_syms) - { - fn_symdb = build_elf_symbol_db(ctxt, n, true); - found = true; - } + fn_symdb = build_elf_symbol_db(ctxt, n, true); else if (has_var_syms) - { - var_symdb = build_elf_symbol_db(ctxt, n, false); - found = true; - } + var_symdb = build_elf_symbol_db(ctxt, n, false); else break; } ctxt.set_corpus_node(n); } - return found; + return true; } /// From an "elf-needed" XML_ELEMENT node, build a vector of strings @@ -2017,24 +2000,16 @@ read_corpus_from_input(read_context& ctxt) string_elf_symbols_map_sptr fn_sym_db, var_sym_db; // Read the symbol databases. - bool is_ok = read_symbol_db_from_input(ctxt, fn_sym_db, var_sym_db); - if (is_ok) - { - // Note that it's possible that both fn_sym_db and var_sym_db - // are nil, due to potential suppression specifications. That's - // fine. - corp.set_symtab(symtab_reader::symtab::load(fn_sym_db, var_sym_db)); - } + read_symbol_db_from_input(ctxt, fn_sym_db, var_sym_db); + // Note that it's possible that both fn_sym_db and var_sym_db are nil, + // due to potential suppression specifications. That's fine. + corp.set_symtab(symtab_reader::symtab::load(fn_sym_db, var_sym_db)); ctxt.get_environment()->canonicalization_is_done(false); // Read the translation units. - do - { - translation_unit_sptr tu = read_translation_unit_from_input(ctxt); - is_ok = bool(tu); - } - while (is_ok); + while (read_translation_unit_from_input(ctxt)) + ; if (ctxt.tracking_non_reachable_types()) { From patchwork Thu May 27 08:53:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 43605 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 BEB0E385040E; Thu, 27 May 2021 08:53:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BEB0E385040E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1622105611; bh=z2hWfHWnmmymHKpHuYFwk9vNR+vVvMRN0fWixJm3iYY=; h=Date:In-Reply-To:References:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:Cc:From; b=IkvFsRCb9NPddCpctm+qejFASEP4XG1l4+8Y3TbU51AjZjce30TyTq9ZF1QFm5xfQ SjdGRd4qZHoFgv7thjJVsbO6ELuVL58/YYCxTKJq27JQQZFXqsAjE8cibLOwVUT9t+ IWeOTGdfC0FG89Y1mtLRD5B3i7x7DLVG7HmFjW94= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by sourceware.org (Postfix) with ESMTPS id C53CD39540BA for ; Thu, 27 May 2021 08:53:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C53CD39540BA Received: by mail-qk1-x749.google.com with SMTP id d15-20020a05620a136fb02902e9e93c69c8so2905911qkl.23 for ; Thu, 27 May 2021 01:53:28 -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:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=z2hWfHWnmmymHKpHuYFwk9vNR+vVvMRN0fWixJm3iYY=; b=HKgBfdjJfFMa9ha40lhvvL8YuYti68lfndEB/gKnHK3xsQNZl7eTXI7AMRc5XB2Y8W U1p+Jbhw3K2YO5RF13M3hTpu8R5vjSVXSePxBK3a3Kw21jwVsJOyJCjnocdMViGgLtAu eSg3sgECLqkXLQj7lAyjfT86NzEg5EDSWnN+MGrFzSejg9o9jG1JqAqzz2BRmZcd6i1n 6Uszlbz4OQUwGLNPoIOQusVVkStr5IHBw8nZthDsGEcvfnFDceRDkbOvNk/ZsgygV18V 881ETHrOnkAHiuKcQIAUVv9rP3Kgb7fgKwKBPqPehqDhKaUTxuQZNOI7Th66f8hGOq2z QIeA== X-Gm-Message-State: AOAM531udTZ9CmstSmms+grelvTVmK9+3wi2pHev8IIcpkkFXh0HkSnc MMiboukWheyGP8/aqt1iI/awQc4P4acfkZ2UPQaS+arlnvenfqEuRJ6DnXeKAZZR306Q+KViupu hf9C6C2XEwkGG59V3tzqpTrfxqtj5u0jyqVZA8iQoRCSJKYVYBhjnVV2ILqpG7ND5dUO0qBo= X-Google-Smtp-Source: ABdhPJxpImznJcxCZCNCRKk4y/RuUzKF5DVWjwcsvAjsNKGwRMD+f6P+dmgzrbIrDsBGHgvKAH/B9jUbKR6Kvw== X-Received: from tef.lon.corp.google.com ([2a00:79e0:d:210:959c:f576:7f09:4ab3]) (user=gprocida job=sendgmr) by 2002:a0c:f4ca:: with SMTP id o10mr276093qvm.9.1622105608334; Thu, 27 May 2021 01:53:28 -0700 (PDT) Date: Thu, 27 May 2021 09:53:05 +0100 In-Reply-To: <20210527085305.1400592-1-gprocida@google.com> Message-Id: <20210527085305.1400592-4-gprocida@google.com> Mime-Version: 1.0 References: <20210427112853.1338240-1-gprocida@google.com> <20210527085305.1400592-1-gprocida@google.com> X-Mailer: git-send-email 2.31.1.818.g46aad6cb9e-goog Subject: [PATCH v2 3/3] abg-reader: create a fresh corpus object per corpus To: libabigail@sourceware.org X-Spam-Status: No, score=-22.4 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: maennich@google.com, kernel-team@android.com Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" Currently the XML reader reuses the same corpus object for all corpora in a corpus group. This has an unwanted side-effect: any abi-instr with the same path in different corpora will collide and parts of the ABI will be lost. Creating a new corpus object for every abi-corpus element seems like the right thing to do. Testing with large ABIs containing many corpora also shows a modest (~10%) abidiff speed improvement. * src/abg-reader.cc (read_corpus_from_input): Always create a fresh corpus object for each abi-corpus XML element. Signed-off-by: Giuliano Procida --- src/abg-reader.cc | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/abg-reader.cc b/src/abg-reader.cc index 9bc43bbf..febd6ca4 100644 --- a/src/abg-reader.cc +++ b/src/abg-reader.cc @@ -1889,16 +1889,12 @@ read_corpus_from_input(read_context& ctxt) BAD_CAST("abi-corpus"))) return nil; - if (!ctxt.get_corpus()) - { - corpus_sptr c(new corpus(ctxt.get_environment(), "")); - ctxt.set_corpus(c); + ctxt.set_corpus(std::make_shared(ctxt.get_environment(), "")); #ifdef WITH_DEBUG_SELF_COMPARISON - if (ctxt.get_environment()->self_comparison_debug_is_on()) - ctxt.get_environment()-> - set_self_comparison_debug_input(ctxt.get_corpus()); + if (ctxt.get_environment()->self_comparison_debug_is_on()) + ctxt.get_environment()-> + set_self_comparison_debug_input(ctxt.get_corpus()); #endif - } if (!ctxt.get_corpus_group()) ctxt.clear_per_corpus_data(); @@ -1952,16 +1948,12 @@ read_corpus_from_input(read_context& ctxt) } else { - if (!ctxt.get_corpus()) - { - corpus_sptr c(new corpus(ctxt.get_environment(), "")); - ctxt.set_corpus(c); + ctxt.set_corpus(std::make_shared(ctxt.get_environment(), "")); #ifdef WITH_DEBUG_SELF_COMPARISON - if (ctxt.get_environment()->self_comparison_debug_is_on()) - ctxt.get_environment()-> - set_self_comparison_debug_input(ctxt.get_corpus()); + if (ctxt.get_environment()->self_comparison_debug_is_on()) + ctxt.get_environment()-> + set_self_comparison_debug_input(ctxt.get_corpus()); #endif - } if (!ctxt.get_corpus_group()) ctxt.clear_per_corpus_data();