Title: Build failure in DBMS_SCHEDULER due to incorrect placement of pg_noreturn

Abierto Apto para principiantes
#2,342 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@darshan-s-44 ya está trabajando en esto.

Desde el 11/10/2026.

  • #2356 de @darshan-s-44 — abierto
  • #2881 de @JINITAIMEI121 — abierto
  • #2902 de @yydawx — abierto
  • #2920 de @zhang1939 — abierto

Evaluación

Dificultad
1/5
Tiempo estimado
Menos de una hora
Aptitud para principiantes
75/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c, postgresql
Área
databases

Línea de trabajo

Las tres declaraciones están en las líneas 153-155 de src/builtin_packages/dbms_scheduler/dbms_scheduler.h, y la unidad de traducción que falla es contrib/ivorysql_ora/src/ivorysql_ora.c. Empieza comprobando dónde se define pg_noreturn y cómo debe ordenarse el atributo respecto a extern y PGDLLEXPORT. Reproduce el problema compilando contrib/ivorysql_ora con gcc. Está terminado cuando esas declaraciones compilan sin advertencias ni errores en la configuración afectada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug good first issue
What happened?

Building IvorySQL fails while compiling contrib/ivorysql_ora/src/ivorysql_ora.c. The compiler reports errors for three background worker entry point declarations in dbms_scheduler.h:

  • SchedulerLauncherMain
  • SchedulerDatabaseWorkerMain
  • SchedulerJobWorkerMain
In file included from src/ivorysql_ora.c:45:
src/builtin_packages/dbms_scheduler/dbms_scheduler.h:153:1: warning: ‘noreturn’ attribute ignored [-Wattributes]
  153 | extern PGDLLEXPORT pg_noreturn void SchedulerLauncherMain(Datum main_arg);
      | ^~~~~~
src/builtin_packages/dbms_scheduler/dbms_scheduler.h:153:32: error: expected identifier or ‘(’ before ‘void’
  153 | extern PGDLLEXPORT pg_noreturn void SchedulerLauncherMain(Datum main_arg);
      |                                ^~~~
src/builtin_packages/dbms_scheduler/dbms_scheduler.h:154:1: warning: ‘noreturn’ attribute ignored [-Wattributes]
  154 | extern PGDLLEXPORT pg_noreturn void SchedulerDatabaseWorkerMain(Datum main_arg);
      | ^~~~~~
src/builtin_packages/dbms_scheduler/dbms_scheduler.h:154:32: error: expected identifier or ‘(’ before ‘void’
  154 | extern PGDLLEXPORT pg_noreturn void SchedulerDatabaseWorkerMain(Datum main_arg);
      |                                ^~~~
src/builtin_packages/dbms_scheduler/dbms_scheduler.h:155:1: warning: ‘noreturn’ attribute ignored [-Wattributes]
  155 | extern PGDLLEXPORT pg_noreturn void SchedulerJobWorkerMain(Datum main_arg);
      | ^~~~~~
src/builtin_packages/dbms_scheduler/dbms_scheduler.h:155:32: error: expected identifier or ‘(’ before ‘void’
  155 | extern PGDLLEXPORT pg_noreturn void SchedulerJobWorkerMain(Datum main_arg);
      |                                ^~~~
make[1]: *** [<builtin>: src/ivorysql_ora.o] Error 1
make: *** [GNUmakefile:11: all-contrib/ivorysql_ora-recurse] Error 2
What did you expect to happen?

Compile successfully.

How can we reproduce it (as minimally and precisely as possible)?

Build IvorySQL with

IvorySQL version

master

Compatible mode

oracle

Server encoding

UTF8

Anything else we need to know?

Likely cause

The declarations place pg_noreturn after extern PGDLLEXPORT.

In configurations where pg_noreturn expands to the C23 attribute [[noreturn]], the attribute must appear at the beginning of the declaration. The current placement appears to cause the warnings and syntax errors above.

Proposed fix

Move pg_noreturn before extern and PGDLLEXPORT:

-extern PGDLLEXPORT pg_noreturn void SchedulerLauncherMain(Datum main_arg);
-extern PGDLLEXPORT pg_noreturn void SchedulerDatabaseWorkerMain(Datum main_arg);
-extern PGDLLEXPORT pg_noreturn void SchedulerJobWorkerMain(Datum main_arg);
+pg_noreturn extern PGDLLEXPORT void SchedulerLauncherMain(Datum main_arg);
+pg_noreturn extern PGDLLEXPORT void SchedulerDatabaseWorkerMain(Datum main_arg);
+pg_noreturn extern PGDLLEXPORT void SchedulerJobWorkerMain(Datum main_arg);
OS version
$ cat /etc/os-release

➜  ivorysql_ora git:(pr-1841) ✗ cat /etc/os-release
PRETTY_NAME="Ubuntu 26.04 LTS"
NAME="Ubuntu"
VERSION_ID="26.04"
VERSION="26.04 LTS (Resolute Raccoon)"
VERSION_CODENAME=resolute
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=resolute
LOGO=ubuntu-logo

$ uname -a

Linux e15 7.0.0-34-generic #34-Ubuntu SMP PREEMPT_DYNAMIC Wed Sep  2 14:29:37 UTC 2026 x86_64 GNU/Linux

cc --version
make --version
gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

cc (Ubuntu 15.2.0-16ubuntu1) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

GNU Make 4.4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later https://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Before submitting
  • I confirmed the problem still happens on current master
  • I searched existing issues and found no duplicate
Lenguaje dominante
C
Estrellas
1.1k
Forks
232
Merge medio
2 d 3 h
PR fusionados (30 d)
8

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de IvorySQL/IvorySQL

Todos los issues de IvorySQL/IvorySQL

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.