[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bash build issues in `devel' branch due to -Werror compiler flag
From: |
Chet Ramey |
Subject: |
Re: Bash build issues in `devel' branch due to -Werror compiler flag |
Date: |
Mon, 17 Dec 2018 09:31:10 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.3.3 |
On 12/16/18 2:35 AM, Eduardo A. Bustamante López wrote:
> Commit 9d80be9ab5cc17011c634e0348c64c15fcba95bf adds the following compiler
> flag:
>
> dualbus@debian:~/src/gnu/bash$ cat -n configure.ac | grep Werror -C3
> 1159 CFLAGS="$CFLAGS -Wno-parentheses -Wno-format-security"
> 1160 if test -n "$DEBUG"
> 1161 then
> ~>1162 CFLAGS="$CFLAGS -Werror"
> 1163 fi
> 1164 fi
> 1165
Good. This is the kind of feedback I want from enabling this option during
the pre-release period. Thanks for taking the time.
> During build (with gcc):
>
> dualbus@debian:~/src/gnu/bash$ make -j$(nproc) -s
> make[1]: warning: -j4 forced in submake: resetting jobserver mode.
> ./parse.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
> make[1]: warning: -j4 forced in submake: resetting jobserver mode.
> expr.c:217:17: error: conflicting types for built-in function ‘exp2’
> [-Werror=builtin-declaration-mismatch]
> static intmax_t exp2 __P((void));
> ^~~~
> cc1: all warnings being treated as errors
>
>
> I know the `exp2' function here has nothing to do with the built-in
> exponential
> function, and that it has had that name for a long time, but the build breaks
> due to that.
Interesting. There seems to be a pretty wide variance between the different
versions of gcc and clang. clang, its other faults aside, doesn't complain
about this (e.g., "Apple LLVM version 10.0.0 (clang-1000.11.45.5)"), while
gcc (e.g., gcc-8.2.1) does.
> dualbus@debian:~/src/gnu/bash$ make -j$(nproc) -s
> make[1]: warning: -j4 forced in submake: resetting jobserver mode.
>
> ***********************************************************
> * *
> * GNU bash, version 5.0.0(1)-rc1 (x86_64-pc-linux-gnu)
> * *
> ***********************************************************
>
> making lib/glob/libglob.a in ./lib/glob
> make[1]: warning: -j4 forced in submake: resetting jobserver mode.
> smatch.c: In function ‘_fnmatch_fallback_wc’:
> smatch.c:318:11: error: implicit declaration of function ‘fnmatch’; did you
> mean ‘gmatch’? [-Werror=implicit-function-declaration]
> return (fnmatch ((const char *)w2, (const char *)w1, 0));
> ^~~~~~~
> gmatch
>
>
> Which I believe is an actual issue and I assume the fix is along the lines of:
It needs a different fix, but there should be a declaration in scope there.
> I also tried clang version 7.0.1-+rc3-2, which gives an additional error:
>
> making lib/sh/libsh.a in ./lib/sh
> (...)
> getenv.c:55:7: error: comparison of nonnull parameter 'name' equal to a
> null pointer is 'false' on first encounter
> [-Werror,-Wtautological-pointer-compare]
> if (name == 0 || *name == '\0')
> ^~~~ ~
> /usr/include/stdlib.h:631:50: note: declared 'nonnull' here
> extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
> ^
> /usr/include/x86_64-linux-gnu/sys/cdefs.h:293:44: note: expanded from macro
> '__nonnull'
> # define __nonnull(params) __attribute__ ((__nonnull__ params))
>
>
> This is due to the stdlib.h header being pulled by bashansi.h in
> lib/sh/getenv.c, thus, providing a function signature that doesn't match
> Bash's
> re-definition of getenv():
I think this should be allowed: if you allow getenv() to be redefined
(configure checks for this) it should always be ok to redefine it with
a standard POSIX function signature.
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/