Subject: [postgresql-interfaces/psqlodbc] issue #94: GCC 15: psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'

From: "df7cb (@df7cb)" <[email-masked]>
Date: Sat, 01 Mar 2025 15:27:13 +0000

>From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1097661:

psqlodbc fails to build with GCC 15:

```
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -Wdate-time -D_FORTIFY_SOURCE=2 -I/usr/include -I/usr/include/postgresql -I/usr/include/postgresql/internal -DUNICODE_SUPPORT -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/home/myon/projects/postgresql/psqlodbc/psqlodbc=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wall -c multibyte.c  -fPIC -DPIC -o .libs/psqlodbcw_la-multibyte.o
In file included from lobj.h:13,
                 from lobj.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from convert.h:12,
                 from convert.c:20:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from environ.h:16,
                 from environ.c:16:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from info.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from statement.h:12,
                 from statement.c:21:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from execute.c:16:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from bind.h:12,
                 from bind.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from connection.h:12,
                 from connection.c:22:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from pgtypes.h:12,
                 from pgtypes.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from pgtypes.h:12,
                 from columninfo.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from options.c:16:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from drvconn.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from multibyte.h:8,
                 from multibyte.c:11:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from qresult.h:12,
                 from qresult.c:19:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from results.c:18:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from tuple.h:16,
                 from tuple.c:20:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from psqlodbc.c:21:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from dlg_specific.h:12,
                 from dlg_specific.c:21:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
In file included from misc.c:15:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[3]: *** [Makefile:770: psqlodbcw_la-lobj.lo] Fehler 1
make[3]: *** Es wird auf noch nicht beendete Prozesse gewartet …
In file included from parse.c:25:
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
      |                       ^~~~
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
psqlodbc.h:300:1: warning: useless type name in empty declaration
  300 | typedef unsigned char bool;
      | ^~~~~~~
make[3]: *** [Makefile:756: psqlodbcw_la-environ.lo] Fehler 1
```

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Sun, 02 Mar 2025 11:47:25 +0000

@df7cb is this new due to some recent changes in the odbc code ?

---

From: "df7cb (@df7cb)" <[email-masked]>
Date: Sun, 02 Mar 2025 11:50:06 +0000

No, this is gcc 15 being stricter/defaulting to -std=c23.

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Sun, 02 Mar 2025 11:56:55 +0000

https://github.com/postgresql-interfaces/psqlodbc/blob/151feaa8080181a5ae0f9bc4d2211e5bd69e5539/configure.ac#L33 is not finding the header or the header doesn't exist ?

---

From: "df7cb (@df7cb)" <[email-masked]>
Date: Sun, 02 Mar 2025 12:00:36 +0000

```
$ zgrep -i bool ../log.gz 
checking size of bool... 1
checking for _Bool... yes
checking for stdbool.h that conforms to C99 or later... yes
psqlodbc.h:300:23: error: 'bool' cannot be defined via 'typedef'
  300 | typedef unsigned char bool;
psqlodbc.h:300:23: note: 'bool' is a keyword with '-std=c23' onwards
  300 | typedef unsigned char bool;
```

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Sun, 02 Mar 2025 20:11:52 +0000

Seems like a problem with configure to me

---

From: "df7cb (@df7cb)" <[email-masked]>
Date: Thu, 12 Jun 2025 12:07:11 +0000

Fixed in c8cb6cfc5bad70f0b690a03a2401fdba6906860f.