Your message dated Sun, 28 Jul 2024 15:27:28 +0000 with message-id <[🔎] E1sY5o0-00EzYC-QA@fasolo.debian.org> and subject line Bug#1076502: Removed package(s) from unstable has caused the Debian Bug report #954806, regarding gcc-9: Optimizes away something it shouldn't to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) -- 954806: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=954806 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: gcc-9: Optimizes away something it shouldn't
- From: Asher Gordon <AsDaGo@posteo.net>
- Date: Mon, 23 Mar 2020 15:15:16 -0400
- Message-id: <87imiuzxvf.fsf@posteo.net>
Package: gcc-9 Version: 9.3.0-3 Severity: normal Dear Maintainer, I am writing a general purpose convenience library called Mu (for Miscellaneous Utilities). It includes an option parsing module intended to be a replacement for getopt_long(). Options are defined in structures which include various information, including an optional callback which will be called when the option is found. The parse_opts() function has a flag `OPT_HELP' (or `OPT_HELP_SHORT' or `OPT_HELP_LONG') which makes it automatically add a '-h' and/or a '--help' option which calls a callback to print a usage message. The problem is, when the test program (test.c) is compiled with optimization, the data fields (set at options.c:127-131) passed to the callback are optimized out. This causes a segmentation fault and/or error message when './test' is passed '-h' or '--help'. Note that when the program is compiled without optimization, no memory errors are reported when run under Valgrind (although memory errors *are* reported when the program is compiled with optimization). I thought that the problem may have been that I was casting the data pointer to (void *), but I tried creating a test program to test that, and that didn't seem to be the problem. To compile the program with optimization, I ran: $ make CC=gcc-9 CFLAGS='-Wall -O1' clean all And without optimization: $ make CC=gcc-9 CFLAGS='-Wall -O0' clean all Note that the problem can be reproduced with GCC 10 also (CC=gcc-10). Also note that no warnings are reported with -Wall, not even with -O3. Three warnings are reported with -Werror, but I don't think they are serious or relevant. Here they are, just in case (compiled with -O3 to catch warnings it might not otherwise): $ make CC=gcc-9 CFLAGS='-Wall -Wextra -O3' clean all rm -f *.o test gcc-9 -Wall -Wextra -O3 -c -o test.o test.c gcc-9 -Wall -Wextra -O3 -c -o compat.o compat.c gcc-9 -Wall -Wextra -O3 -c -o format.o format.c format.c: In function ‘format_list’: format.c:277:36: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare] 277 | if (width && size + char_width > width - *col) { | ^ In file included from format.c:34: format.c:303:27: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare] 303 | assert(index + tab_width > width - *col); | ^ format.c:314:19: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare] 314 | assert(index + 1 > width - *col); | ^ gcc-9 -Wall -Wextra -O3 -c -o io.o io.c gcc-9 -Wall -Wextra -O3 -c -o options.o options.c gcc-9 -Wall -Wextra -O3 -c -o safe.o safe.c gcc-9 test.o compat.o format.o io.o options.o safe.o -o test Also note that when compiled with Clang (CC=clang), even with -O3, the program works as expected and no memory errors are reported by Valgrind. Note that only the -O* and all the -O* options trigger the bug. I tried manually passing all the -f* options which (according to the documentation) are enabled by the various -O* options. However, strangely, I could not reproduce the bug that way. The following patch adds a nop() function to options.c that is used to prevent the data fields from being optimized out. When this patch is applied, the issue is no longer present, even when compiled with -O3 (with gcc-9 or gcc-10).--- options.c~ 2020-03-23 14:23:08.625333110 -0400 +++ options.c 2020-03-23 14:23:17.841369826 -0400 @@ -81,6 +81,13 @@ static int free_opts(const char *, const OPTION *); static int format_help_callback(void *, char *); +static void nop(const void *data, ...) { + /* We have to do this so GCC doesn't optimize calls to us away. */ + va_list ap; + va_start(ap, data); + va_end(ap); +} + /* * Parse options. Returns zero on success or nonzero on error, in * which case an error message will be printed to `stderr'. The last @@ -137,6 +144,7 @@ opt->callback_none = format_help_callback; opt->data = &data; opt->help = "print this help and exit"; + nop(data.prog_name, data.usage, data.desc, data.notes, data.options); } else { /* This is slightly evil (casting it to a non-const), but we knowSince I was not able write a simpler program that triggers the bug, I have attached the source tarball (mu.tar.gz). README.Bugs says that I should provide the *.i files, so I have included them in the tarball. Different .i files are produced under optimization, so I have included the ones produced with '-O0 --save-temps'. I have also attached a patch (nop_preprocessed.patch) that adds the nop() function to the preprocessed options.i. Here is the output of 'gcc-9 -v' and 'gcc-10 -v': $ gcc-9 -v Using built-in specs. COLLECT_GCC=gcc-9 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 9.3.0-3' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex Thread model: posix gcc version 9.3.0 (Debian 9.3.0-3) $ gcc-10 -v Using built-in specs. COLLECT_GCC=gcc-10 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 10-20200312-2' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,amdgcn-amdhsa,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 10.0.1 20200312 (experimental) [master revision c56871dd15a:7ba6e7f0f21:daf2852b883762d921361462dad1f99320faca2a] (Debian 10-20200312-2) I think this may be an upstream bug, but I'm not sure and README.Bugs says "If in doubt, report the bug to the Debian BTS." Thanks, Asher -- He was part of my dream, of course -- but then I was part of his dream too. -- Lewis Carroll -------- I prefer to send and receive mail encrypted. Please send me your public key, and if you do not have my public key, please let me know. Thanks. GPG fingerprint: 38F3 975C D173 4037 B397 8095 D4C9 C4FC 5460 8E68 -- System Information: Debian Release: bullseye/sid APT prefers testing-debug APT policy: (500, 'testing-debug'), (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 5.4.0-4-amd64 (SMP w/2 CPU cores) Kernel taint flags: TAINT_FIRMWARE_WORKAROUND Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages gcc-9 depends on: ii binutils 2.34-5 ii cpp-9 9.3.0-3 ii gcc-9-base 9.3.0-3 ii libc6 2.30-2 ii libcc1-0 10-20200312-2 ii libgcc-9-dev 9.3.0-3 ii libgcc-s1 10-20200312-2 ii libgmp10 2:6.2.0+dfsg-4 ii libisl22 0.22.1-1 ii libmpc3 1.1.0-1 ii libmpfr6 4.0.2-1 ii libstdc++6 10-20200312-2 ii zlib1g 1:1.2.11.dfsg-2 Versions of packages gcc-9 recommends: ii libc6-dev 2.30-2 Versions of packages gcc-9 suggests: ii gcc-9-doc 9.2.0-1 pn gcc-9-locales <none> pn gcc-9-multilib <none> -- no debconf informationAttachment: mu.tar.gz
Description: Mu source tarball--- options.i~ 2020-03-23 14:56:38.434556710 -0400 +++ options.i 2020-03-23 14:56:47.334654330 -0400 @@ -2487,6 +2487,33 @@ static int free_opts(const char *, const OPTION *); static int format_help_callback(void *, char *); +static void nop(const void *data, ...) { + + va_list ap; + +# 87 "options.c" 3 4 + __builtin_va_start( +# 87 "options.c" + ap +# 87 "options.c" 3 4 + , +# 87 "options.c" + data +# 87 "options.c" 3 4 + ) +# 87 "options.c" + ; + +# 88 "options.c" 3 4 + __builtin_va_end( +# 88 "options.c" + ap +# 88 "options.c" 3 4 + ) +# 88 "options.c" + ; +} + @@ -2513,51 +2540,51 @@ for (n_opts = 0; !((options + n_opts)->short_opt == '\0' && (options + n_opts)->long_opt == -# 109 "options.c" 3 4 +# 116 "options.c" 3 4 ((void *)0) -# 109 "options.c" +# 116 "options.c" ); n_opts++) { const OPTION *opt = options + n_opts; if (flags & 0b00001000) -# 112 "options.c" 3 4 +# 119 "options.c" 3 4 ((void) sizeof (( -# 112 "options.c" +# 119 "options.c" opt->short_opt != 'h' -# 112 "options.c" 3 4 +# 119 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 112 "options.c" +# 119 "options.c" opt->short_opt != 'h' -# 112 "options.c" 3 4 +# 119 "options.c" 3 4 ) ; else __assert_fail ( -# 112 "options.c" +# 119 "options.c" "opt->short_opt != 'h'" -# 112 "options.c" 3 4 -, "options.c", 112, __extension__ __PRETTY_FUNCTION__); })) -# 112 "options.c" +# 119 "options.c" 3 4 +, "options.c", 119, __extension__ __PRETTY_FUNCTION__); })) +# 119 "options.c" ; if (flags & 0b00010000) -# 114 "options.c" 3 4 +# 121 "options.c" 3 4 ((void) sizeof (( -# 114 "options.c" +# 121 "options.c" !opt->long_opt || strcmp(opt->long_opt, "help") -# 114 "options.c" 3 4 +# 121 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 114 "options.c" +# 121 "options.c" !opt->long_opt || strcmp(opt->long_opt, "help") -# 114 "options.c" 3 4 +# 121 "options.c" 3 4 ) ; else __assert_fail ( -# 114 "options.c" +# 121 "options.c" "!opt->long_opt || strcmp(opt->long_opt, \"help\")" -# 114 "options.c" 3 4 -, "options.c", 114, __extension__ __PRETTY_FUNCTION__); })) -# 114 "options.c" +# 121 "options.c" 3 4 +, "options.c", 121, __extension__ __PRETTY_FUNCTION__); })) +# 121 "options.c" ; } - actual_opts = _xmalloc_line("options.c", 118, __func__, sizeof(*actual_opts) * (n_opts + 2)); + actual_opts = _xmalloc_line("options.c", 125, __func__, sizeof(*actual_opts) * (n_opts + 2)); memcpy(actual_opts, options, sizeof(*actual_opts) * n_opts); opt = actual_opts + n_opts; @@ -2579,6 +2606,7 @@ opt->callback_none = format_help_callback; opt->data = &data; opt->help = "print this help and exit"; + nop(data.prog_name, data.usage, data.desc, data.notes, data.options); } else { @@ -2589,9 +2617,9 @@ for (const OPTION *opt = actual_opts; !((opt)->short_opt == '\0' && (opt)->long_opt == -# 149 "options.c" 3 4 +# 157 "options.c" 3 4 ((void *)0) -# 149 "options.c" +# 157 "options.c" ); opt++) { if (opt->found_opt) *(opt->found_opt) = 0; @@ -2614,51 +2642,51 @@ break; case OPT_STRING: arg->arg_string = -# 170 "options.c" 3 4 +# 178 "options.c" 3 4 ((void *)0) -# 170 "options.c" +# 178 "options.c" ; break; case OPT_FILE: arg->arg_file = -# 173 "options.c" 3 4 +# 181 "options.c" 3 4 ((void *)0) -# 173 "options.c" +# 181 "options.c" ; break; case OPT_DIRECTORY: arg->arg_directory = -# 176 "options.c" 3 4 +# 184 "options.c" 3 4 ((void *)0) -# 176 "options.c" +# 184 "options.c" ; break; default: -# 179 "options.c" 3 4 +# 187 "options.c" 3 4 ((void) sizeof (( -# 179 "options.c" +# 187 "options.c" !"Invalid option type" -# 179 "options.c" 3 4 +# 187 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 179 "options.c" +# 187 "options.c" !"Invalid option type" -# 179 "options.c" 3 4 +# 187 "options.c" 3 4 ) ; else __assert_fail ( -# 179 "options.c" +# 187 "options.c" "!\"Invalid option type\"" -# 179 "options.c" 3 4 - , "options.c", 179, __extension__ __PRETTY_FUNCTION__); })) -# 179 "options.c" +# 187 "options.c" 3 4 + , "options.c", 187, __extension__ __PRETTY_FUNCTION__); })) +# 187 "options.c" ; } } if (opt->argstr) *(opt->argstr) = -# 184 "options.c" 3 4 +# 192 "options.c" 3 4 ((void *)0) -# 184 "options.c" +# 192 "options.c" ; } } @@ -2666,9 +2694,9 @@ for (int i = 1; i < argc; i++) { char *optstr = argv[i]; const char *arg = (i + 1 < argc) ? argv[i+1] : -# 190 "options.c" 3 4 +# 198 "options.c" 3 4 ((void *)0) -# 190 "options.c" +# 198 "options.c" ; @@ -2702,21 +2730,21 @@ if (flags & 0b00000001) { -# 222 "options.c" 3 4 +# 230 "options.c" 3 4 ((void) sizeof (( -# 222 "options.c" +# 230 "options.c" !(flags & 0b00000010) -# 222 "options.c" 3 4 +# 230 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 222 "options.c" +# 230 "options.c" !(flags & 0b00000010) -# 222 "options.c" 3 4 +# 230 "options.c" 3 4 ) ; else __assert_fail ( -# 222 "options.c" +# 230 "options.c" "!(flags & OPT_STOP_AFTER_ARG)" -# 222 "options.c" 3 4 - , "options.c", 222, __extension__ __PRETTY_FUNCTION__); })) -# 222 "options.c" +# 230 "options.c" 3 4 + , "options.c", 230, __extension__ __PRETTY_FUNCTION__); })) +# 230 "options.c" ; argv[(*p_argc)++] = optstr; } @@ -2731,9 +2759,9 @@ if (*p_argc < argc) argv[*p_argc] = -# 235 "options.c" 3 4 +# 243 "options.c" 3 4 ((void *)0) -# 235 "options.c" +# 243 "options.c" ; return ret == -1; @@ -2753,9 +2781,9 @@ struct winsize ws; if (ioctl(fileno(file), -# 253 "options.c" 3 4 +# 261 "options.c" 3 4 0x5413 -# 253 "options.c" +# 261 "options.c" , &ws) >= 0) width = ws.ws_col; else @@ -2768,9 +2796,9 @@ if (format(file, width, &cur_col, 0, 0, "Usage: %s %s\n%s\n%s", prog_name, usage, desc, ((options)->short_opt == '\0' && (options)->long_opt == -# 264 "options.c" 3 4 +# 272 "options.c" 3 4 ((void *)0) -# 264 "options.c" +# 272 "options.c" ) ? "" : "\n")) return 1; @@ -2781,9 +2809,9 @@ long_required_arg = short_opts = 0; for (const OPTION *opt = options; !((opt)->short_opt == '\0' && (opt)->long_opt == -# 273 "options.c" 3 4 +# 281 "options.c" 3 4 ((void *)0) -# 273 "options.c" +# 281 "options.c" ); opt++) { if (opt->short_opt) { short_opts = 1; @@ -2801,9 +2829,9 @@ for (const OPTION *opt = options; !((opt)->short_opt == '\0' && (opt)->long_opt == -# 289 "options.c" 3 4 +# 297 "options.c" 3 4 ((void *)0) -# 289 "options.c" +# 297 "options.c" ); opt++) { if (opt->short_opt) { if (format(file, width, &cur_col, 0, 0, " -%c", opt->short_opt)) @@ -2832,7 +2860,7 @@ return 0; } -# 328 "options.c" +# 336 "options.c" static int parse_short_opt(const char *prog_name, const char *optstr, const char *argument, const OPTION *options, int flags) { @@ -2844,30 +2872,30 @@ for (char c = *optstr; (c = *optstr); optstr++) { const OPTION *opt; const char *argstr = -# 338 "options.c" 3 4 +# 346 "options.c" 3 4 ((void *)0) -# 338 "options.c" +# 346 "options.c" ; for (opt = options; !((opt)->short_opt == '\0' && (opt)->long_opt == -# 341 "options.c" 3 4 +# 349 "options.c" 3 4 ((void *)0) -# 341 "options.c" +# 349 "options.c" ); opt++) { if (opt->short_opt == c) break; } if (((opt)->short_opt == '\0' && (opt)->long_opt == -# 346 "options.c" 3 4 +# 354 "options.c" 3 4 ((void *)0) -# 346 "options.c" +# 354 "options.c" )) { fprintf( -# 347 "options.c" 3 4 +# 355 "options.c" 3 4 stderr -# 347 "options.c" +# 355 "options.c" , "%s: '%c': invalid option\n", prog_name, c); return -1; } @@ -2922,9 +2950,9 @@ if (*optstr == '=') { fprintf( -# 400 "options.c" 3 4 +# 408 "options.c" 3 4 stderr -# 400 "options.c" +# 408 "options.c" , "%s: %s: invalid option\n", prog_name, optstr); return -1; } @@ -2933,9 +2961,9 @@ index = find_unambiguously(options, optstr); if (index < 0) { fprintf( -# 407 "options.c" 3 4 +# 415 "options.c" 3 4 stderr -# 407 "options.c" +# 415 "options.c" , "%s: %s: invalid option\n", prog_name, optstr); return -1; } @@ -2977,9 +3005,9 @@ optstr = opt->long_opt; fprintf( -# 447 "options.c" 3 4 +# 455 "options.c" 3 4 stderr -# 447 "options.c" +# 455 "options.c" , "%s: '%s': option requires argument\n", prog_name, optstr); return 1; @@ -2992,16 +3020,16 @@ if (opt->has_arg == OPT_NONE) { if (is_short) fprintf( -# 458 "options.c" 3 4 +# 466 "options.c" 3 4 stderr -# 458 "options.c" +# 466 "options.c" , "%s: '%c': option does not take argument\n", prog_name, opt->short_opt); else fprintf( -# 461 "options.c" 3 4 +# 469 "options.c" 3 4 stderr -# 461 "options.c" +# 469 "options.c" , "%s: %s: option does not take argument\n", prog_name, opt->long_opt); @@ -3034,17 +3062,17 @@ case OPT_INT: -# 492 "options.c" 3 4 +# 500 "options.c" 3 4 (*__errno_location ()) -# 492 "options.c" +# 500 "options.c" = 0; arg_int = strtol(argstr, &endptr, 0); if (*endptr) { fprintf( -# 496 "options.c" 3 4 +# 504 "options.c" 3 4 stderr -# 496 "options.c" +# 504 "options.c" , "%s: %s: not a%s\n", prog_name, argstr, (opt->type == OPT_BOOL) ? " yes or no value" : "n integer"); return 1; @@ -3052,34 +3080,34 @@ if (opt->type == OPT_INT) { if (! -# 502 "options.c" 3 4 +# 510 "options.c" 3 4 (*__errno_location ()) -# 502 "options.c" +# 510 "options.c" && (arg_int < opt->ibound.lower || arg_int > opt->ibound.upper)) -# 504 "options.c" 3 4 +# 512 "options.c" 3 4 (*__errno_location ()) -# 504 "options.c" +# 512 "options.c" = -# 504 "options.c" 3 4 +# 512 "options.c" 3 4 34 -# 504 "options.c" +# 512 "options.c" ; if ( -# 506 "options.c" 3 4 +# 514 "options.c" 3 4 (*__errno_location ()) -# 506 "options.c" +# 514 "options.c" ) { fprintf( -# 507 "options.c" 3 4 +# 515 "options.c" 3 4 stderr -# 507 "options.c" +# 515 "options.c" , "%s: %s: %s\n", prog_name, argstr, strerror( -# 507 "options.c" 3 4 +# 515 "options.c" 3 4 (*__errno_location ()) -# 507 "options.c" +# 515 "options.c" )); return 1; } @@ -3094,51 +3122,51 @@ case OPT_FLOAT: -# 520 "options.c" 3 4 +# 528 "options.c" 3 4 (*__errno_location ()) -# 520 "options.c" +# 528 "options.c" = 0; p_arg->arg_float = strtod(argstr, &endptr); if (*endptr) { fprintf( -# 524 "options.c" 3 4 +# 532 "options.c" 3 4 stderr -# 524 "options.c" +# 532 "options.c" , "%s: %s: not a floating-point number\n", prog_name, argstr); return 1; } if (! -# 529 "options.c" 3 4 +# 537 "options.c" 3 4 (*__errno_location ()) -# 529 "options.c" +# 537 "options.c" && (p_arg->arg_float < opt->fbound.lower || p_arg->arg_float > opt->fbound.upper)) -# 531 "options.c" 3 4 +# 539 "options.c" 3 4 (*__errno_location ()) -# 531 "options.c" +# 539 "options.c" = -# 531 "options.c" 3 4 +# 539 "options.c" 3 4 34 -# 531 "options.c" +# 539 "options.c" ; if ( -# 533 "options.c" 3 4 +# 541 "options.c" 3 4 (*__errno_location ()) -# 533 "options.c" +# 541 "options.c" ) { fprintf( -# 534 "options.c" 3 4 +# 542 "options.c" 3 4 stderr -# 534 "options.c" +# 542 "options.c" , "%s: %s: %s\n", prog_name, argstr, strerror( -# 534 "options.c" 3 4 +# 542 "options.c" 3 4 (*__errno_location ()) -# 534 "options.c" +# 542 "options.c" )); return 1; } @@ -3153,28 +3181,28 @@ p_arg->arg_file = file_open(argstr, opt->file_mode); if (!p_arg->arg_file) { fprintf( -# 547 "options.c" 3 4 +# 555 "options.c" 3 4 stderr -# 547 "options.c" +# 555 "options.c" , "%s: cannot open %s: %s\n", prog_name, argstr, strerror( -# 548 "options.c" 3 4 +# 556 "options.c" 3 4 (*__errno_location ()) -# 548 "options.c" +# 556 "options.c" )); return 1; } if (p_arg->arg_file == -# 552 "options.c" 3 4 +# 560 "options.c" 3 4 stdin -# 552 "options.c" +# 560 "options.c" ) argstr = "<stdin>"; else if (p_arg->arg_file == -# 554 "options.c" 3 4 +# 562 "options.c" 3 4 stdout -# 554 "options.c" +# 562 "options.c" ) argstr = "<stdout>"; @@ -3184,14 +3212,14 @@ p_arg->arg_directory = opendir(argstr); if (!p_arg->arg_directory) { fprintf( -# 562 "options.c" 3 4 +# 570 "options.c" 3 4 stderr -# 562 "options.c" +# 570 "options.c" , "%s: cannot open directory %s: %s\n", prog_name, argstr, strerror( -# 563 "options.c" 3 4 +# 571 "options.c" 3 4 (*__errno_location ()) -# 563 "options.c" +# 571 "options.c" )); return 1; } @@ -3200,21 +3228,21 @@ default: -# 570 "options.c" 3 4 +# 578 "options.c" 3 4 ((void) sizeof (( -# 570 "options.c" +# 578 "options.c" !"Invalid option type" -# 570 "options.c" 3 4 +# 578 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 570 "options.c" +# 578 "options.c" !"Invalid option type" -# 570 "options.c" 3 4 +# 578 "options.c" 3 4 ) ; else __assert_fail ( -# 570 "options.c" +# 578 "options.c" "!\"Invalid option type\"" -# 570 "options.c" 3 4 - , "options.c", 570, __extension__ __PRETTY_FUNCTION__); })) -# 570 "options.c" +# 578 "options.c" 3 4 + , "options.c", 578, __extension__ __PRETTY_FUNCTION__); })) +# 578 "options.c" ; } } @@ -3263,30 +3291,30 @@ break; default: -# 617 "options.c" 3 4 +# 625 "options.c" 3 4 ((void) sizeof (( -# 617 "options.c" +# 625 "options.c" !"Invalid option type" -# 617 "options.c" 3 4 +# 625 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 617 "options.c" +# 625 "options.c" !"Invalid option type" -# 617 "options.c" 3 4 +# 625 "options.c" 3 4 ) ; else __assert_fail ( -# 617 "options.c" +# 625 "options.c" "!\"Invalid option type\"" -# 617 "options.c" 3 4 -, "options.c", 617, __extension__ __PRETTY_FUNCTION__); })) -# 617 "options.c" +# 625 "options.c" 3 4 +, "options.c", 625, __extension__ __PRETTY_FUNCTION__); })) +# 625 "options.c" ; } } if (ret) fprintf( -# 622 "options.c" 3 4 +# 630 "options.c" 3 4 stderr -# 622 "options.c" +# 630 "options.c" , "%s: %s\n", prog_name, err); } @@ -3299,14 +3327,14 @@ case OPT_FILE: if (file_close(p_arg->arg_file)) { fprintf( -# 633 "options.c" 3 4 +# 641 "options.c" 3 4 stderr -# 633 "options.c" +# 641 "options.c" , "%s: cannot close %s: %s\n", prog_name, argstr, strerror( -# 634 "options.c" 3 4 +# 642 "options.c" 3 4 (*__errno_location ()) -# 634 "options.c" +# 642 "options.c" )); return 1; } @@ -3315,14 +3343,14 @@ case OPT_DIRECTORY: if (closedir(p_arg->arg_directory)) { fprintf( -# 641 "options.c" 3 4 +# 649 "options.c" 3 4 stderr -# 641 "options.c" +# 649 "options.c" , "%s: cannot close directory %s: %s\n", prog_name, argstr, strerror( -# 642 "options.c" 3 4 +# 650 "options.c" 3 4 (*__errno_location ()) -# 642 "options.c" +# 650 "options.c" )); return 1; } @@ -3356,36 +3384,36 @@ n_matches = 0; for (n_haystack = 0; !((haystack + n_haystack)->short_opt == '\0' && (haystack + n_haystack)->long_opt == -# 674 "options.c" 3 4 +# 682 "options.c" 3 4 ((void *)0) -# 674 "options.c" +# 682 "options.c" ); n_haystack++) { if (haystack[n_haystack].long_opt) n_matches++; } - matches = _xmalloc_line("options.c", 680, __func__, sizeof(*matches) * n_matches); + matches = _xmalloc_line("options.c", 688, __func__, sizeof(*matches) * n_matches); index = 0; for (int i = 0; i < n_haystack; i++) { const char *str = haystack[i].long_opt; if (str) { -# 685 "options.c" 3 4 +# 693 "options.c" 3 4 ((void) sizeof (( -# 685 "options.c" +# 693 "options.c" index < n_matches -# 685 "options.c" 3 4 +# 693 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 685 "options.c" +# 693 "options.c" index < n_matches -# 685 "options.c" 3 4 +# 693 "options.c" 3 4 ) ; else __assert_fail ( -# 685 "options.c" +# 693 "options.c" "index < n_matches" -# 685 "options.c" 3 4 - , "options.c", 685, __extension__ __PRETTY_FUNCTION__); })) -# 685 "options.c" +# 693 "options.c" 3 4 + , "options.c", 693, __extension__ __PRETTY_FUNCTION__); })) +# 693 "options.c" ; matches[index].match = str; matches[index].index = i; @@ -3393,21 +3421,21 @@ } } -# 691 "options.c" 3 4 +# 699 "options.c" 3 4 ((void) sizeof (( -# 691 "options.c" +# 699 "options.c" index == n_matches -# 691 "options.c" 3 4 +# 699 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 691 "options.c" +# 699 "options.c" index == n_matches -# 691 "options.c" 3 4 +# 699 "options.c" 3 4 ) ; else __assert_fail ( -# 691 "options.c" +# 699 "options.c" "index == n_matches" -# 691 "options.c" 3 4 - , "options.c", 691, __extension__ __PRETTY_FUNCTION__); })) -# 691 "options.c" +# 699 "options.c" 3 4 + , "options.c", 699, __extension__ __PRETTY_FUNCTION__); })) +# 699 "options.c" ; @@ -3463,9 +3491,9 @@ break; case OPT_STRING: arg->arg_string = -# 745 "options.c" 3 4 +# 753 "options.c" 3 4 ((void *)0) -# 745 "options.c" +# 753 "options.c" ; break; @@ -3473,21 +3501,21 @@ if (arg->arg_file) { if (file_close(arg->arg_file)) { fprintf( -# 751 "options.c" 3 4 +# 759 "options.c" 3 4 stderr -# 751 "options.c" +# 759 "options.c" , "%s: cannot close %s: %s\n", prog_name, opt->argstr ? *(opt->argstr) : "file", strerror( -# 752 "options.c" 3 4 +# 760 "options.c" 3 4 (*__errno_location ()) -# 752 "options.c" +# 760 "options.c" )); return 1; } arg->arg_file = -# 755 "options.c" 3 4 +# 763 "options.c" 3 4 ((void *)0) -# 755 "options.c" +# 763 "options.c" ; } break; @@ -3496,22 +3524,22 @@ if (arg->arg_directory) { if (closedir(arg->arg_directory)) { fprintf( -# 762 "options.c" 3 4 +# 770 "options.c" 3 4 stderr -# 762 "options.c" +# 770 "options.c" , "%s: cannot close directory%s%s: %s\n", prog_name, opt->argstr ? " " : "", opt->argstr ? *(opt->argstr) : "", strerror( -# 764 "options.c" 3 4 +# 772 "options.c" 3 4 (*__errno_location ()) -# 764 "options.c" +# 772 "options.c" )); return 1; } arg->arg_directory = -# 767 "options.c" 3 4 +# 775 "options.c" 3 4 ((void *)0) -# 767 "options.c" +# 775 "options.c" ; } @@ -3519,29 +3547,29 @@ default: -# 773 "options.c" 3 4 +# 781 "options.c" 3 4 ((void) sizeof (( -# 773 "options.c" +# 781 "options.c" !"Invalid option type" -# 773 "options.c" 3 4 +# 781 "options.c" 3 4 ) ? 1 : 0), __extension__ ({ if ( -# 773 "options.c" +# 781 "options.c" !"Invalid option type" -# 773 "options.c" 3 4 +# 781 "options.c" 3 4 ) ; else __assert_fail ( -# 773 "options.c" +# 781 "options.c" "!\"Invalid option type\"" -# 773 "options.c" 3 4 - , "options.c", 773, __extension__ __PRETTY_FUNCTION__); })) -# 773 "options.c" +# 781 "options.c" 3 4 + , "options.c", 781, __extension__ __PRETTY_FUNCTION__); })) +# 781 "options.c" ; } if (opt->argstr) *(opt->argstr) = -# 777 "options.c" 3 4 +# 785 "options.c" 3 4 ((void *)0) -# 777 "options.c" +# 785 "options.c" ; return 0; @@ -3555,9 +3583,9 @@ int ret = 0; for (const OPTION *opt = options; !((opt)->short_opt == '\0' && (opt)->long_opt == -# 789 "options.c" 3 4 +# 797 "options.c" 3 4 ((void *)0) -# 789 "options.c" +# 797 "options.c" ); opt++) ret += free_opt(prog_name, opt); @@ -3571,9 +3599,9 @@ static int format_help_callback(void *data, char *err) { struct help_callback_data *d = data; int ret = format_help( -# 801 "options.c" 3 4 +# 809 "options.c" 3 4 stdout -# 801 "options.c" +# 809 "options.c" , d->prog_name, d->usage, d->desc, d->notes, d->options); @@ -3581,15 +3609,15 @@ fflush( -# 807 "options.c" 3 4 +# 815 "options.c" 3 4 stdout -# 807 "options.c" +# 815 "options.c" ); snprintf(err, 256, "cannot print help message: %s", strerror( -# 809 "options.c" 3 4 +# 817 "options.c" 3 4 (*__errno_location ()) -# 809 "options.c" +# 817 "options.c" )); return ret; }Attachment: signature.asc
Description: PGP signature
--- End Message ---
--- Begin Message ---
- To: 735497-done@bugs.debian.org,930430-done@bugs.debian.org,939655-done@bugs.debian.org,945133-done@bugs.debian.org,946678-done@bugs.debian.org,947500-done@bugs.debian.org,947751-done@bugs.debian.org,949745-done@bugs.debian.org,950747-done@bugs.debian.org,951294-done@bugs.debian.org,951423-done@bugs.debian.org,954806-done@bugs.debian.org,955533-done@bugs.debian.org,956820-done@bugs.debian.org,956829-done@bugs.debian.org,961011-done@bugs.debian.org,966194-done@bugs.debian.org,994108-done@bugs.debian.org,
- Cc: gcc-9@packages.debian.org
- Subject: Bug#1076502: Removed package(s) from unstable
- From: Debian FTP Masters <ftpmaster@ftp-master.debian.org>
- Date: Sun, 28 Jul 2024 15:27:28 +0000
- Message-id: <[🔎] E1sY5o0-00EzYC-QA@fasolo.debian.org>
Version: 9.5.0-6+rm Dear submitter, as the package gcc-9 has just been removed from the Debian archive unstable we hereby close the associated bug reports. We are sorry that we couldn't deal with your issue properly. For details on the removal, please see https://bugs.debian.org/1076502 The version of this package that was in Debian prior to this removal can still be found using https://snapshot.debian.org/. Please note that the changes have been done on the master archive and will not propagate to any mirrors until the next dinstall run at the earliest. This message was generated automatically; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org. Debian distribution maintenance software pp. Scott Kitterman (the ftpmaster behind the curtain)
--- End Message ---