Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable -Werror #1026

Merged
merged 6 commits into from
Mar 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 128 additions & 0 deletions .github/bors_log_expected_warnings
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
../../../../libffi/src/x86/ffi.c:612:1: warning: label ‘out’ defined but not used [-Wunused-label]
../../../../libssp/ssp.c:172:11: warning: array subscript 0 is outside array bounds of ‘volatile int[0]’ [-Warray-bounds]
../../../libcpp/expr.cc:808:18: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libcpp/expr.cc:811:39: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libcpp/expr.cc:821:34: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libcpp/macro.cc:186:23: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libcpp/macro.cc:215:24: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libcpp/macro.cc:3701:58: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libcpp/macro.cc:3716:58: warning: format not a string literal and no format arguments [-Wformat-security]
../../../libffi/src/java_raw_api.c:317:3: warning: ‘ffi_java_raw_to_ptrarray’ is deprecated [-Wdeprecated-declarations]
../../../libffi/src/java_raw_api.c:328:3: warning: ‘ffi_java_raw_size’ is deprecated [-Wdeprecated-declarations]
../../../libffi/src/java_raw_api.c:331:3: warning: ‘ffi_java_ptrarray_to_raw’ is deprecated [-Wdeprecated-declarations]
../../../libffi/src/java_raw_api.c:369:3: warning: ‘ffi_prep_java_raw_closure_loc’ is deprecated [-Wdeprecated-declarations]
../../../libffi/src/x86/ffi64.c:783:1: warning: label ‘out’ defined but not used [-Wunused-label]
../../../libffi/src/x86/ffiw64.c:250:1: warning: label ‘out’ defined but not used [-Wunused-label]
../../../libssp/ssp.c:172:11: warning: array subscript 0 is outside array bounds of ‘volatile int[0]’ [-Warray-bounds]
../../c++tools/server.cc:486:11: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../c++tools/server.cc:616:10: warning: ignoring return value of ‘int pipe(int*)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/../libgcc/libgcov-util.c:465:9: warning: ignoring return value of ‘int chdir(const char*)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/analyzer/engine.cc:1521:3: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/engine.cc:1521:60: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/program-state.cc:1252:20: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/analyzer/sm-file.cc:181:34: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-file.cc:181:70: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-file.cc:231:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-file.cc:231:63: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-file.cc:234:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-file.cc:234:59: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:1023:36: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:1023:61: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:1193:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:1193:67: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:1196:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:1196:69: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:1199:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:1200:28: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:1269:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:1269:66: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:1277:31: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:1277:66: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:795:7: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:796:24: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:796:54: warning: format ‘%s’ expects argument of type ‘char*’, but argument 4 has type ‘diagnostic_event_id_t*’ [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:801:7: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:802:23: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:859:34: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:859:70: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-malloc.cc:930:34: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-malloc.cc:930:76: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/analyzer/sm-sensitive.cc:138:34: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/analyzer/sm-sensitive.cc:139:22: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/c-family/c-common.cc:6580:30: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/c-family/c-common.cc:6584:33: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/c/c-convert.cc:84:31: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/c/c-typeck.cc:11850:42: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/c/c-typeck.cc:3689:28: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/c/c-typeck.cc:4448:42: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/c/c-typeck.cc:6616:43: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/collect-utils.cc:237:37: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/collect2.cc:2397:37: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/config/i386/i386.cc:21446:32: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/config/i386/i386.cc:21446:32: warning: unknown conversion type character ‘{’ in format [-Wformat=]
../../gcc/config/i386/i386.cc:21446:32: warning: unknown conversion type character ‘}’ in format [-Wformat=]
../../gcc/config/i386/i386.cc:2535:8: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/config/i386/i386.cc:2535:8: warning: unknown conversion type character ‘{’ in format [-Wformat=]
../../gcc/config/i386/i386.cc:2535:8: warning: unknown conversion type character ‘}’ in format [-Wformat=]
../../gcc/diagnostic.cc:2021:52: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/fold-const.cc:305:42: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/gcc.cc:10560:12: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/gcc.cc:7776:9: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/gcc.cc:7779:13: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/gcc.cc:7780:13: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/gcc.cc:7782:9: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/genhooks.cc:112:17: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/genhooks.cc:121:14: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/genhooks.cc:174:14: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/genhooks.cc:180:14: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/gimple-range-gori.cc:411:22: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/gimple-ssa-warn-access.cc:3954:15: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/gimple-ssa-warn-access.cc:3962:11: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/ipa-devirt.cc:951:47: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/lto-wrapper.cc:1131:8: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/lto-wrapper.cc:1376:52: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/lto-wrapper.cc:1957:35: warning: format not a string literal and no format arguments [-Wformat-security]
../../gcc/lto/lto-common.cc:2072:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/lto/lto-common.cc:2074:9: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/lto/lto-common.cc:2094:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
../../gcc/omp-low.cc:10527:19: warning: ‘T’ conversion used within a quoted sequence [-Wformat=]
../../gcc/omp-offload.cc:2241:22: warning: ‘T’ conversion used within a quoted sequence [-Wformat=]
../../gcc/omp-offload.cc:2279:22: warning: ‘T’ conversion used within a quoted sequence [-Wformat=]
../../gcc/tree-diagnostic-path.cc:177:21: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/tree-diagnostic-path.cc:177:24: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/tree-diagnostic-path.cc:177:28: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘diagnostic_event_id_t*’ [-Wformat=]
../../gcc/tree-diagnostic-path.cc:467:12: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘diagnostic_event_id_t*’ [-Wformat=]
../../gcc/tree-diagnostic-path.cc:467:7: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/tree-diagnostic-path.cc:467:9: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/tree-diagnostic-path.cc:68:21: warning: too many arguments for format [-Wformat-extra-args]
../../gcc/tree-diagnostic-path.cc:68:23: warning: unknown conversion type character ‘@’ in format [-Wformat=]
../../gcc/tree-diagnostic-path.cc:68:26: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘diagnostic_event_id_t*’ [-Wformat=]
../../gcc/tree-ssa-sccvn.cc:280:67: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/expr.cc:808:18: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/expr.cc:811:39: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/expr.cc:821:34: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/macro.cc:186:23: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/macro.cc:215:24: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/macro.cc:3701:58: warning: format not a string literal and no format arguments [-Wformat-security]
../../libcpp/macro.cc:3716:58: warning: format not a string literal and no format arguments [-Wformat-security]
/home/runner/work/gccrs/gccrs/gccrs-build/x86_64-pc-linux-gnu/32/libssp/../../../../libssp/gets-chk.c:74: warning: the `gets' function is dangerous and should not be used.
/home/runner/work/gccrs/gccrs/gccrs-build/x86_64-pc-linux-gnu/libssp/../../../libssp/gets-chk.c:74: warning: the `gets' function is dangerous and should not be used.
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:864: warning: ignoring old recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
Makefile:873: warning: overriding recipe for target 'all-multi'
gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
libtool: install: warning: remember to run `libtool --finish /usr/local/libexec/gcc/x86_64-pc-linux-gnu/12.0.1'
18 changes: 17 additions & 1 deletion .github/workflows/ccpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ on:
jobs:
build-and-check:

env:
# Force locale, in particular for reproducible results re '.github/bors_log_expected_warnings' (see below).
LC_ALL: C.UTF-8

runs-on: ubuntu-latest

steps:
Expand Down Expand Up @@ -44,9 +48,21 @@ jobs:
--enable-multilib

- name: Build
shell: bash
run: |
cd gccrs-build; \
make -j $(nproc)
make -j $(nproc) 2>&1 | tee log

- name: Check for new warnings
run: |
cd gccrs-build
< log grep 'warning: ' | sort > log_warnings
if diff -U0 ../.github/bors_log_expected_warnings log_warnings; then
:
else
echo 'See <https://github.com/Rust-GCC/gccrs/pull/1026>.'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like this! This way it will be clear why it failed

exit 1
fi >&2

- name: Run Tests
run: |
Expand Down
39 changes: 39 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,45 @@ Please see the [Contributing to GCC](https://gcc.gnu.org/contribute.html) guide
Not all contributions must be code; we would love to see new test cases or bugs and issues to be reported.
Feel free to add any comments on open PRs


## Continuous Integration

When submitting (or updating) a [GitHub Pull Request](https://github.com/Rust-GCC/gccrs/pull/),
several automated checks are run.
Generally, a "green status" is necessary before merge.


### Compiler Diagnostics

That is, here, diagnostics emitted by the "initial" compiler used to build GCC/Rust.

If building a native toolchain,
GCC by default does a 3-stage bootstrap build (<https://gcc.gnu.org/install/configure.html>).
In addition to making sure that GCC is able to reproduce itself bit-by-bit,
this also means that stages 2+ are built with `-Werror`
(turning most _warning_ into _error_ diagnostics; see `--enable-werror`,
possibly enabled by default).
This helps to catch a good number of bugs, because it enforces that GCC compiles without compiler diagnostics;
it's a requirement for upstream patch submission (<https://gcc.gnu.org/contribute.html#testing>).

GCC generally is only expected to be "warning-clean" without `--disable-bootstrap`
(that is, default `--enable-bootstrap` for a native build),
and not for the initial stage where it's using the "initial" compiler -- otherwise
we're at the mercy of whatever "initial" compiler we're using.
Doing a `--disable-bootstrap` build is much faster, of course, so we're often doing that:
for example, per the instructions above, or in the standard CI.
With that, we're missing out on the aspect that _enforces that GCC compiles without compiler diagnostics_.

To encounter that, the default CI has a [_check for new warnings_ step](https://github.com/Rust-GCC/gccrs/pull/1026)
that verifies in the CI `--disable-bootstrap` build configuration that no new warnings are introduced.
If that step fails, it usually points out a new _warning_ you've introduced erroneously, and should address.
Occasionally it means that simply the `.github/bors_log_expected_warnings` file needs to be updated,
for example if due to any kind of "environmental changes" (for example, CI "initial" compiler changes).
Unless diligently reproducing the CI configuration (in particular "initial" compiler, GCC version),
it's not really feasible to reproduce this check locally.
If in doubt, do a local `--enable-bootstrap` build, or submit your changes, and wait for the CI system's results.


## Community

We can be found on all usual Rust channels such as Zulip, but we also have our own channels:
Expand Down