From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x444.google.com (mail-pf1-x444.google.com [IPv6:2607:f8b0:4864:20::444]) by sourceware.org (Postfix) with ESMTPS id 29E4B393D02A for ; Thu, 26 Nov 2020 09:04:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 29E4B393D02A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=kito.cheng@sifive.com Received: by mail-pf1-x444.google.com with SMTP id t8so1075935pfg.8 for ; Thu, 26 Nov 2020 01:04:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=zhRBw4eS77/lJ/kbACu3/kfdQQuHzJe1pRxpRmNM1b0=; b=kmFq0eKibZUU2k2tJRBDebfb8K8wJ4taSmk6CmpbTkRxHc+e7ONtdpycoZjWSNf8qc p/75wftuCWKBxUPNB0UZp04+Y+Oooi/d/KflYcObXjDx2k4o2wbfyN/FKk0Wjn66w8Yx a+e4rDmnmbO9/igo6FnhFP9zzyXiGp6jyYO7y7KNtInuOVJZBRdWxieBsxpRTBtd1bBC v6J5Rug369SqeP6fKJmKq95RlUaX+jjxu8LQuGDoI0tqz564a5F1J4wKSVPkxeyV7NQu ooAtoQt8D79bCNbyuiePfm3nSj0KUxOCN3tGO4lMJfscbG73EyqNXSHfFm5f6wgdLKRi HlTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=zhRBw4eS77/lJ/kbACu3/kfdQQuHzJe1pRxpRmNM1b0=; b=PpHNNEcw2gAwTymy57zFw3eWKv+GzolwvdHc+DcYBiM+RdTRbcD0Q8ukLMcIGbGrqS U0gpO3QL1K1fG4dAnijg7vVlgLyEAFOO6jPaowiKWjjlf/Pc8XK3QGXfr2VvlW1MAveb YnfvzZoD90hPZa/umiJgjZoeK5El6HkTIOwTlNz1+YSMkLIOkG3lVj6vV3HLWzva6GL3 uMUrBqz3W6MO/gN5iIhHvYrRjKr/p1sk34PGTK1248IvEVUBSx/OzpgWJkyC9vUixQhU vP9K3hqWpnebZlO+ro4xAVeKgTbMwr4IxCSnL8p5wJ38BtKlAvqKh9h5vzadFBYqby4o w0JQ== X-Gm-Message-State: AOAM5314kIddwrUvxn9eCCaY4wn3M6TPj4qiib7bgMlyARfsZ04QlvfV K8JRaQfzRYy4sDaztAyBB2/muEMOI4KyD/YB X-Google-Smtp-Source: ABdhPJxDIHda3LYn94gJwiU8QRKY6c9jE+oBWyV7PufuQ8B4T64Z3hdjcDWr0LzPfojKPatPXivORA== X-Received: by 2002:a63:1707:: with SMTP id x7mr1785626pgl.71.1606381471762; Thu, 26 Nov 2020 01:04:31 -0800 (PST) Received: from hsinchu02.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id i6sm5346678pjt.49.2020.11.26.01.04.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Nov 2020 01:04:31 -0800 (PST) From: Kito Cheng To: gcc-patches@gcc.gnu.org, jimw@sifive.com, kito.cheng@gmail.com Cc: Kito Cheng Subject: [PATCH] Fix print_multilib_info when default arguments appear in the option list with '!' Date: Thu, 26 Nov 2020 17:04:20 +0800 Message-Id: <20201126090420.100928-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Nov 2020 09:04:34 -0000 This issue is found when we try to always define MULTILIB_DEFAULTS for -march and -mabi for RISC-V back-end, however `-print-multi-lib` will skip multi-lib setting if match any one of flag in MULTILIB_DEFAULTS, even some options are specified in the option list with '!'. e.g. We have default march=rv32i and mabi=ilp32. And we have following multi-lib set: ". !march=rv32i !march=rv32im !march=rv32imafc !mabi=ilp32 !mabi=ilp32f;" "rv32i/ilp32 march=rv32i !march=rv32im !march=rv32imafc mabi=ilp32 !mabi=ilp32f;" "rv32im/ilp32 !march=rv32i march=rv32im !march=rv32imafc mabi=ilp32 !mabi=ilp32f;" "rv32imafc/ilp32f !march=rv32i !march=rv32ic !march=rv32im march=rv32imafc !mabi=ilp32 mabi=ilp32f;" `-print-multi-lib` willl show `.` and `rv32imafc/ilp32f` only, because the mabi=ilp32 is matched, however there is `!march=rv32i` in `rv32im/ilp32`, so `rv32im/ilp32` should keep, because it reject march=rv32i. Note: This can be reproduced via following configure options with patch [1]: gcc/configure --target=riscv64-elf --with-arch=rv32i --with-abi=ilp32 \ --with-multilib-generator="rv32i-ilp32--;rv32im-ilp32--;rv32imafc-ilp32f--" [1] https://gcc.gnu.org/pipermail/gcc-patches/2020-November/559707.html gcc/ChangeLog: * gcc.c (print_multilib_info): Check default arguments not appeared in multi-lib option list with '!' --- gcc/gcc.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/gcc/gcc.c b/gcc/gcc.c index 26bc5065eeb..b2a26b5af81 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -9730,6 +9730,7 @@ print_multilib_info (void) const char *p = multilib_select; const char *last_path = 0, *this_path; int skip; + int not_arg; unsigned int last_path_len = 0; while (*p != '\0') @@ -9884,9 +9885,13 @@ print_multilib_info (void) goto invalid_select; if (*q == '!') - arg = NULL; + { + not_arg = 1; + q++; + } else - arg = q; + not_arg = 0; + arg = q; while (*q != ' ' && *q != ';') { @@ -9895,11 +9900,17 @@ print_multilib_info (void) ++q; } - if (arg != NULL - && default_arg (arg, q - arg)) + if (default_arg (arg, q - arg)) { - skip = 1; - break; + /* Stop checking if any default arguments appeared in not + list. */ + if (not_arg) + { + skip = 0; + break; + } + else + skip = 1; } if (*q == ' ') -- 2.29.2