sudo-project / sudo

Utility to execute a command as another user
https://www.sudo.ws
Other
1.16k stars 208 forks source link

Build failure with 1.9.13 with GCC 13.0.1_pre20230212 (`../../include/sudo_fatal.h:174:31: error: expected identifier or '(' before 'void'`) #239

Closed thesamesam closed 1 year ago

thesamesam commented 1 year ago

This is with and without defec5d46eec7345b62060049f72215ffd7f3e7e applied, fwiw.

Clang 16.0.0_rc2 and GCC 12.2.1_p20230211 are fine, but GCC 13.0.1_pre20230212 isn't. Looking into it more now.

Build errors excerpt:

In file included from ./gidlist.c:31:
../../include/sudo_fatal.h:174:1: warning: 'noreturn' attribute ignored [-Wattributes]
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:174:31: error: expected identifier or '(' before 'void'
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:175:1: warning: 'noreturn' attribute ignored [-Wattributes]
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:175:31: error: expected identifier or '(' before 'void'
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:176:1: warning: 'noreturn' attribute ignored [-Wattributes]
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:176:31: error: expected identifier or '(' before 'void'
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      |                               ^~~~
../../include/sudo_fatal.h:177:1: warning: 'noreturn' attribute ignored [-Wattributes]
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:177:31: error: expected identifier or '(' before 'void'
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:178:1: warning: 'noreturn' attribute ignored [-Wattributes]
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:178:31: error: expected identifier or '(' before 'void'
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:179:1: warning: 'noreturn' attribute ignored [-Wattributes]
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:179:31: error: expected identifier or '(' before 'void'
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      |                               ^~~~
make[1]: *** [Makefile:918: gidlist.lo] Error 1
make[1]: *** Waiting for unfinished jobs....
In file included from ./mkdir_parents.c:42:
../../include/sudo_fatal.h:174:1: warning: 'noreturn' attribute ignored [-Wattributes]
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:174:31: error: expected identifier or '(' before 'void'
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:175:1: warning: 'noreturn' attribute ignored [-Wattributes]
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:175:31: error: expected identifier or '(' before 'void'
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:176:1: warning: 'noreturn' attribute ignored [-Wattributes]
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:176:31: error: expected identifier or '(' before 'void'
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      |                               ^~~~
../../include/sudo_fatal.h:177:1: warning: 'noreturn' attribute ignored [-Wattributes]
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:177:31: error: expected identifier or '(' before 'void'
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:178:1: warning: 'noreturn' attribute ignored [-Wattributes]
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:178:31: error: expected identifier or '(' before 'void'
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:179:1: warning: 'noreturn' attribute ignored [-Wattributes]
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:179:31: error: expected identifier or '(' before 'void'
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      |                               ^~~~
make[1]: *** [Makefile:1104: mkdir_parents.lo] Error 1
In file included from ./fatal.c:43:
../../include/sudo_fatal.h:174:1: warning: 'noreturn' attribute ignored [-Wattributes]
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:174:31: error: expected identifier or '(' before 'void'
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:175:1: warning: 'noreturn' attribute ignored [-Wattributes]
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:175:31: error: expected identifier or '(' before 'void'
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:176:1: warning: 'noreturn' attribute ignored [-Wattributes]
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:176:31: error: expected identifier or '(' before 'void'
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      |                               ^~~~
../../include/sudo_fatal.h:177:1: warning: 'noreturn' attribute ignored [-Wattributes]
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:177:31: error: expected identifier or '(' before 'void'
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:178:1: warning: 'noreturn' attribute ignored [-Wattributes]
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:178:31: error: expected identifier or '(' before 'void'
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:179:1: warning: 'noreturn' attribute ignored [-Wattributes]
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:179:31: error: expected identifier or '(' before 'void'
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      |                               ^~~~
In file included from ./json.c:38:
../../include/sudo_fatal.h:174:1: warning: 'noreturn' attribute ignored [-Wattributes]
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:174:31: error: expected identifier or '(' before 'void'
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:175:1: warning: 'noreturn' attribute ignored [-Wattributes]
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:175:31: error: expected identifier or '(' before 'void'
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:176:1: warning: 'noreturn' attribute ignored [-Wattributes]
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:176:31: error: expected identifier or '(' before 'void'
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      |                               ^~~~
../../include/sudo_fatal.h:177:1: warning: 'noreturn' attribute ignored [-Wattributes]
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:177:31: error: expected identifier or '(' before 'void'
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:178:1: warning: 'noreturn' attribute ignored [-Wattributes]
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:178:31: error: expected identifier or '(' before 'void'
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:179:1: warning: 'noreturn' attribute ignored [-Wattributes]
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:179:31: error: expected identifier or '(' before 'void'
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      |                               ^~~~
./json.c: In function 'json_expand_buf':
../../include/sudo_fatal.h:97:5: warning: implicit declaration of function 'sudo_fatalx_nodebug_v1'; did you mean 'sudo_fatalx_nodebug'? [-Wimplicit-function-declaration]
   97 |     sudo_fatalx_nodebug_v1(__VA_ARGS__);                                       \
      |     ^~~~~~~~~~~~~~~~~~~~~~
./json.c:55:13: note: in expansion of macro 'sudo_fatalx'
   55 |             sudo_fatalx(U_("%s: %s"),
      |             ^~~~~~~~~~~
make[1]: *** [Makefile:712: fatal.lo] Error 1
make[1]: *** [Makefile:1008: json.lo] Error 1
In file included from ./event.c:42:
../../include/sudo_fatal.h:174:1: warning: 'noreturn' attribute ignored [-Wattributes]
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:174:31: error: expected identifier or '(' before 'void'
  174 | sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:175:1: warning: 'noreturn' attribute ignored [-Wattributes]
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:175:31: error: expected identifier or '(' before 'void'
  175 | sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2);
      |                               ^~~~
../../include/sudo_fatal.h:176:1: warning: 'noreturn' attribute ignored [-Wattributes]
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:176:31: error: expected identifier or '(' before 'void'
  176 | sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3);
      |                               ^~~~
../../include/sudo_fatal.h:177:1: warning: 'noreturn' attribute ignored [-Wattributes]
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:177:31: error: expected identifier or '(' before 'void'
  177 | sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:178:1: warning: 'noreturn' attribute ignored [-Wattributes]
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:178:31: error: expected identifier or '(' before 'void'
  178 | sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0);
      |                               ^~~~
../../include/sudo_fatal.h:179:1: warning: 'noreturn' attribute ignored [-Wattributes]
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      | ^~~~~~~~~~~~~~~
../../include/sudo_fatal.h:179:31: error: expected identifier or '(' before 'void'
  179 | sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0);
      |                               ^~~~
make[1]: *** [Makefile:663: event.lo] Error 1
make[1]: Leaving directory '/var/tmp/portage/app-admin/sudo-1.9.13/work/sudo-1.9.13/lib/util'
make: *** [Makefile:108: all] Error 2

Full log: build.log

thesamesam commented 1 year ago

I'll close this for now until I can look at it more.

thesamesam commented 1 year ago

~I've filed https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796 with GCC as it's not clear to me what's right here. It's exposed/caused by https://github.com/sudo-project/sudo/commit/e707ffe58b3ccfe5c72f54c38eac1d7069d5021e in sudo though.~

The GCC folks say that part is intentional. I get it now, it's an issue in sudo with the order of the attribute styles.