From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by sourceware.org (Postfix) with ESMTP id 958D839AA837 for ; Wed, 17 Jun 2020 19:53:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 958D839AA837 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-163-cAkyBIDhNEuWxj3IDuT9Dg-1; Wed, 17 Jun 2020 15:53:12 -0400 X-MC-Unique: cAkyBIDhNEuWxj3IDuT9Dg-1 Received: by mail-wr1-f72.google.com with SMTP id t5so1794663wro.20 for ; Wed, 17 Jun 2020 12:53:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=0sONjQIPQVVlYoaItRQrqfulSouiKHaMILRuCIWdgd4=; b=ZCO0CxEg1GX7T0in4eSmuTNYiOwDIKjGM45nKKpUdkc2XiNEJi3EqQYTO6cyA7C0S8 0et4y+shwVGJWIW/hyvs/ZBxfQ0NfuTw92tNaTLXEh/2slIgtxaplOWbbcYHFQ2mYDTQ bH0CMcLoLHvf+SyjLRC4AbVASK49p0yEhbq78lPAPkPHqr30PAubdf0lj0Lixi4RDzJ6 gErsfc5gMofAsP9hbEvoUsCthvUzR+q9BvjNV3P69uOq+bIe8j4OzgJUelLFQ+x/3vAE psMaGyGFryL5Zw0ED1MUZHa1Jok0eiZX9bXsRJY/RAIy9NPhCt2pDhwZGvxP+PI9RhQ5 M+fw== X-Gm-Message-State: AOAM530OtUa7znajqwPIEjFhX6srYWMmrWqQeVBw3JUS7I72G8a0KyHB yL2+PgFiN1GHcLkzm/EQSXwiHx2+ijbfiFi1KekB+OJOBRDLu8vwz0z9ShmG4+uBSpbrSqG9CAr feJ0jSv5yhhSL5rCLayYSLg== X-Received: by 2002:adf:f3c7:: with SMTP id g7mr882575wrp.244.1592423591472; Wed, 17 Jun 2020 12:53:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvNIG6z5O+74xV6tVAQf3A1RZ+exX8Kj89YocZJyYznSYvGfr7XLLKQu5mfZLtlsDpsybrBg== X-Received: by 2002:adf:f3c7:: with SMTP id g7mr882561wrp.244.1592423591179; Wed, 17 Jun 2020 12:53:11 -0700 (PDT) Received: from ?IPv6:2001:8a0:f922:c400:56ee:75ff:fe8d:232b? ([2001:8a0:f922:c400:56ee:75ff:fe8d:232b]) by smtp.gmail.com with ESMTPSA id e12sm710727wro.52.2020.06.17.12.53.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jun 2020 12:53:10 -0700 (PDT) Subject: [PATCH] W/ Clang, compile C/C++ testcases with -Wno-unknown-warning-option To: Gary Benson References: <1590757423-18004-1-git-send-email-gbenson@redhat.com> <87mu5qaa2b.fsf@tromey.com> <68fd1b3e-10ae-8f1d-b96d-f35ce7ae3037@redhat.com> <20200616124212.GB30305@blade.nx> <5b75188a-0c0e-528a-1bbd-213f5fa52bd4@redhat.com> <20200617172913.GA5386@blade.nx> Cc: Tom Tromey , gdb-patches@sourceware.org From: Pedro Alves Message-ID: <4a87b8c6-a71c-cb54-8e23-7388c7128c2e@redhat.com> Date: Wed, 17 Jun 2020 20:53:09 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <20200617172913.GA5386@blade.nx> Content-Language: en-US X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-8.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, 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: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jun 2020 19:53:15 -0000 On 6/17/20 6:29 PM, Gary Benson via Gdb-patches wrote: > Pedro Alves wrote: >> In general, the problematic sequence is something like this: >> >> #1 - A testcase compiles successfully with clang version X. >> #2 - clang version "X + 1" adds a new warning, enabled by default, >> which breaks the test. >> #3 - We add -Wno-newwarning, fixing the testcase with clang "X + 1" >> #4 - Now building the test with clang version X no longer works, >> due to "unknown warning option". >> >> Making gcc_compile always add -Wno-unknown-warning-option to the >> build flags fixes this problem for good. At least with clang. > > Right. > > First, I'm assuming you mean gdb_compile, not gcc_compile? Yes. > > Second, it's not clear whether you mean to add it always, or just > if the compiler is clang? For Clang. > > Third, is this something you could easily do? Because I've spent > nearly an hour on this already, gdb_compile is nearly 250 lines of > special cases and I'm no closer to figuring out where I wouldn't > break something. Sure. Like this. I tried adding -Wno-foo to a testcase and checked that without the patch it failed due to the "unknown option" warning, and passed with the patch. >From 79f1cfddeea957a778c856c879a386901a96609b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 17 Jun 2020 19:29:37 +0100 Subject: [PATCH] W/ Clang, compile C/C++ testcases with -Wno-unknown-warning-option Some C/C++ testcases unconditionally pass -Wno-foo as additional options to disable some warning. That is OK with GCC, because GCC accepts -Wno-foo silently even if it doesn't support -Wfoo. This is a feature which allows disabling warnings with newer compilers without breaking builds with older compilers. Clang however warns about unknown -Wno-foo by default, unless you pass -Wno-unknown-warning-option as well: $ gcc -Wno-foo test.c * nothing, compiles successfuly * $ clang -Wno-foo test.c warning: unknown warning option '-Wno-foo [-Wunknown-warning-option] This commit adds -Wunknown-warning-option centrally in gdb_compile, so that individual testcases don't have to worry about breaking older Clangs. IOW, this avoids this problematic scenario: #1 - A testcase compiles successfully with Clang version X. #2 - Clang version "X + 1" adds a new warning, enabled by default, which breaks the test. #3 - We add -Wno-newwarning to the testcase, fixing the testcase with clang "X + 1". #4 - Now building the test with Clang version X no longer works, due to "unknown warning option". gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Alves * lib/gdb.exp (gdb_compile): Update intro comment. If C/C++ with Clang, add "-Wno-unknown-warning-option" to the options. --- gdb/testsuite/lib/gdb.exp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index f502eb157d8..bbc940a4512 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3826,7 +3826,8 @@ set gdb_saved_set_unbuffered_mode_obj "" # - ldflags=flag: Add FLAG to the linker flags. # - incdir=path: Add PATH to the searched include directories. # - libdir=path: Add PATH to the linker searched directories. -# - ada, c++, f77: Compile the file as Ada, C++ or Fortran. +# - ada, c++, f77, f90, rust: Compile the file as Ada, C++, +# Fortran 77, Fortran 90 or Rust. # - debug: Build with debug information. # - optimize: Build with optimization. @@ -3850,6 +3851,22 @@ proc gdb_compile {source dest type options} { set new_options [universal_compile_options] } + # Some C/C++ testcases unconditionally pass -Wno-foo as additional + # options to disable some warning. That is OK with GCC, because + # by design, GCC accepts any -Wno-foo option, even if it doesn't + # support -Wfoo. Clang however warns about unknown -Wno-foo by + # default, unless you pass -Wno-unknown-warning-option as well. + # We do that here, so that individual testcases don't have to + # worry about it. + if {[lsearch -exact $options getting_compiler_info] == -1 + && [lsearch -exact $options rust] == -1 + && [lsearch -exact $options ada] == -1 + && [lsearch -exact $options f77] == -1 + && [lsearch -exact $options f90] == -1 + && [test_compiler_info "clang-*"]} { + lappend new_options "additional_flags=-Wno-unknown-warning-option" + } + # Place (and look for) Fortran `.mod` files in the output # directory for this specific test. if {[lsearch -exact $options f77] != -1 \ base-commit: 669203174311c5be76744a879563c697cd479853 -- 2.14.5