From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-sender-0.a4lg.com (mail-sender.a4lg.com [153.120.152.154]) by sourceware.org (Postfix) with ESMTPS id 7B8233857364 for ; Wed, 12 Oct 2022 17:03:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7B8233857364 Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail-sender-0.a4lg.com (Postfix) with ESMTPSA id EA4C6300089; Wed, 12 Oct 2022 17:03:46 +0000 (UTC) Message-ID: <527a756e-2b1f-1509-5a6f-e4344fbee404@irq.a4lg.com> Date: Thu, 13 Oct 2022 02:03:45 +0900 Mime-Version: 1.0 Subject: Re: [PATCH v3 4/5] sim: Check known getopt definition existence Content-Language: en-US To: Tom de Vries Cc: gdb-patches@sourceware.org References: <7b235ccb-ab2e-cba0-3015-2eae5fe6a8a4@suse.de> From: Tsukasa OI In-Reply-To: <7b235ccb-ab2e-cba0-3015-2eae5fe6a8a4@suse.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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, 12 Oct 2022 17:03:54 -0000 Hi Tom, On 2022/10/13 1:28, Tom de Vries wrote: > On 10/6/22 08:43, Tsukasa OI via Gdb-patches wrote: >> Clang generates a warning if there is a function declaration/definition >> with zero arguments.  Such declarations/definitions without a >> prototype (an >> argument list) are deprecated forms of indefinite arguments >> ("-Wdeprecated-non-prototype").  On the default configuration, it >> causes a >> build failure (unless "--disable-werror" is specified). >> >> include/getopt.h defines some getopt function definitions but one of them >> has a form "extern int getopt ();".  If this form is selected in >> include/getopt.h, Clang generates a warning and the build fails by >> default. >> >> In really old environments, this getopt definition with no arguments is >> necessary (because the definition may change between environments). >> However, this definition is now a cause of problems on modern >> environments. >> >> A good news is, this definition is not always selected (e.g. if used by >> binutils/*.c).  This is because configuration scripts of binutils, gas, >> gprof and ld tries to find known definition of getopt function is used >> and >> defines HAVE_DECL_GETOPT macro.  If this macro is defined when >> getopt.h is >> included, a good form of getopt is used and Clang won't generate >> warnings. >> >> This commit adds a modified portion of ld/configure.ac to find the known >> getopt definition.  If we could find one (and we *will* in most modern >> environments), we don't need to rely on the deprecated definition. > > I'm guessing this cause the build breakage on buildbot gdb-centos-x86_64 . > > https://builder.sourceware.org/buildbot/#/builders/71/builds/1392 > > Thanks, > - Tom I didn't see that error and it seems this error is very strange considering sim/m32c/main.c is the **only** file which should not be affected by my change as long as correctly declares getopt. Adding #include after #include might change something but I cannot guarantee whether this change would fix the issue. Thanks, Tsukasa > > >> --- >>   sim/config.h.in  |  3 +++ >>   sim/configure    | 32 ++++++++++++++++++++++++++++++++ >>   sim/configure.ac | 10 ++++++++++ >>   3 files changed, 45 insertions(+) >> >> diff --git a/sim/config.h.in b/sim/config.h.in >> index 84c363c0aec..9a94b289e46 100644 >> --- a/sim/config.h.in >> +++ b/sim/config.h.in >> @@ -41,6 +41,9 @@ >>   /* Define to 1 if you have the `chmod' function. */ >>   #undef HAVE_CHMOD >>   +/* Is the prototype for getopt in in the expected >> format? */ >> +#undef HAVE_DECL_GETOPT >> + >>   /* Define to 1 if you have the declaration of `tzname', and to 0 if >> you don't. >>      */ >>   #undef HAVE_DECL_TZNAME >> diff --git a/sim/configure b/sim/configure >> index 75d1935df38..dac7f085be1 100755 >> --- a/sim/configure >> +++ b/sim/configure >> @@ -16428,6 +16428,38 @@ $as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >> >&6; } >>   fi >>     +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a known >> getopt prototype in unistd.h" >&5 >> +$as_echo_n "checking for a known getopt prototype in unistd.h... " >> >&6; } >> +if ${sim_cv_decl_getopt_unistd_h+:} false; then : >> +  $as_echo_n "(cached) " >&6 >> +else >> +  cat confdefs.h - <<_ACEOF >conftest.$ac_ext >> +/* end confdefs.h.  */ >> +#include >> +int >> +main () >> +{ >> +extern int getopt (int, char *const*, const char *); >> +  ; >> +  return 0; >> +} >> +_ACEOF >> +if ac_fn_c_try_compile "$LINENO"; then : >> +  sim_cv_decl_getopt_unistd_h=yes >> +else >> +  sim_cv_decl_getopt_unistd_h=no >> +fi >> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext >> +fi >> + >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: >> $sim_cv_decl_getopt_unistd_h" >&5 >> +$as_echo "$sim_cv_decl_getopt_unistd_h" >&6; } >> +if test $sim_cv_decl_getopt_unistd_h = yes; then >> + >> +$as_echo "#define HAVE_DECL_GETOPT 1" >>confdefs.h >> + >> +fi >> + >>       diff --git a/sim/configure.ac b/sim/configure.ac >> index 66a1020efe0..be0cfdbea32 100644 >> --- a/sim/configure.ac >> +++ b/sim/configure.ac >> @@ -177,6 +177,16 @@ SIM_AC_OPTION_STDIO >>   SIM_AC_OPTION_TRACE >>   SIM_AC_OPTION_WARNINGS >>   +AC_MSG_CHECKING(for a known getopt prototype in unistd.h) >> +AC_CACHE_VAL(sim_cv_decl_getopt_unistd_h, >> +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [extern >> int getopt (int, char *const*, const char *);])], >> +sim_cv_decl_getopt_unistd_h=yes, sim_cv_decl_getopt_unistd_h=no)]) >> +AC_MSG_RESULT($sim_cv_decl_getopt_unistd_h) >> +if test $sim_cv_decl_getopt_unistd_h = yes; then >> +  AC_DEFINE([HAVE_DECL_GETOPT], 1, >> +        [Is the prototype for getopt in in the expected >> format?]) >> +fi >> + >>   dnl These are unfortunate.  They are conditionally called by other >> sim macros >>   dnl but always used by common/Make-common.in.  So we have to subst >> here even >>   dnl when the rest of the code is in the respective macros.  Once we >> merge the >