diff --git a/.github/bors_log_expected_warnings b/.github/bors_log_expected_warnings new file mode 100644 index 000000000000..0ab3ebab047e --- /dev/null +++ b/.github/bors_log_expected_warnings @@ -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' diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 50ef728efd53..5e9e5f4a0e41 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -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: @@ -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 .' + exit 1 + fi >&2 - name: Run Tests run: | diff --git a/README.md b/README.md index 5c8307ff4d8d..9675b11e669b 100644 --- a/README.md +++ b/README.md @@ -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 (). +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 (). + +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: