The pthread_incomplete_struct_argument fix was intended for ancient
versions of Glibc (only 2.3.3 and 2.3.4, I believe). From Glibc 2.3.5
the pthread.h header already included the change to use a pointer
instead of an array, so the fixinclude was no longer used.

However, the https://sourceware.org/bugzilla/show_bug.cgi?id=26647 fix
changed the __setjmpbuf declaration to use struct __jmp_buf_tag __env[1]
again, which caused this fixinclude to start matching again. This means
that GCC now installs a "fixed" pthread.h with a change to a declaration
that guarded by #if ! __GNUC_PREREQ (11, 0), i.e. it's not even relevant
for modern versions of GCC. The "fixed" pthread.h causes problems for
users because of changes to internal implementation details of the
pthread_cond_t type, which require the "fixed" pthread.h to be updated
with mkheaders if Glibc is updated.

This change adds a bypass to the fixinclude, so that it no longer
matches modern Glibc versions, and only applies to glibc versions 2.3.3
and 2.3.4 as originally intended.

fixincludes/ChangeLog:

        PR bootstrap/118009
        PR bootstrap/119089
        * inclhack.def (pthread_incomplete_struct_argument): Add bypass.
        * fixincl.x: Regenerate.
---

Tested x86_64-linux.

OK for trunk?

And release branches?

Aside: should we change the comment talking about SVN-MERGE?


 fixincludes/fixincl.x    | 15 +++++++++++----
 fixincludes/inclhack.def |  1 +
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x
index 819c02c483c7..d28262ef9eeb 100644
--- a/fixincludes/fixincl.x
+++ b/fixincludes/fixincl.x
@@ -2,11 +2,11 @@
  *
  * DO NOT EDIT THIS FILE   (fixincl.x)
  *
- * It has been AutoGen-ed  August 15, 2025 at 05:30:32 PM by AutoGen 5.18.16
+ * It has been AutoGen-ed  August 19, 2025 at 04:54:32 PM by AutoGen 5.18.16
  * From the definitions    inclhack.def
  * and the template file   fixincl
  */
-/* DO NOT SVN-MERGE THIS FILE, EITHER Fri Aug 15 17:30:32 CEST 2025
+/* DO NOT SVN-MERGE THIS FILE, EITHER Tue Aug 19 16:54:32 BST 2025
  *
  * You must regenerate it.  Use the ./genfixes script.
  *
@@ -7547,8 +7547,15 @@ tSCC zPthread_Incomplete_Struct_ArgumentList[] =
 tSCC zPthread_Incomplete_Struct_ArgumentSelect0[] =
        "struct __jmp_buf_tag";
 
-#define    PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_TEST_CT  1
+/*
+ *  content bypass pattern - skip fix if pattern found
+ */
+tSCC zPthread_Incomplete_Struct_ArgumentBypass0[] =
+       "bits/types/struct___jmp_buf_tag.h";
+
+#define    PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_TEST_CT  2
 static tTestDesc aPthread_Incomplete_Struct_ArgumentTests[] = {
+  { TT_NEGREP,   zPthread_Incomplete_Struct_ArgumentBypass0, (regex_t*)NULL },
   { TT_EGREP,    zPthread_Incomplete_Struct_ArgumentSelect0, (regex_t*)NULL }, 
};
 
 /*
@@ -11202,7 +11209,7 @@ static const char* apzX11_SprintfPatch[] = {
  *
  *  List of all fixes
  */
-#define REGEX_COUNT          318
+#define REGEX_COUNT          319
 #define MACH_LIST_SIZE_LIMIT 187
 #define FIX_COUNT            274
 
diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def
index 35ccaf03c4fa..71777cb10e73 100644
--- a/fixincludes/inclhack.def
+++ b/fixincludes/inclhack.def
@@ -3803,6 +3803,7 @@ fix = {
     hackname  = pthread_incomplete_struct_argument;
     files     = pthread.h;
     select    = "struct __jmp_buf_tag";
+    bypass    = "bits/types/struct___jmp_buf_tag.h";
     c_fix     = format;
     c_fix_arg = "%1 *%2%3";
     c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) "
-- 
2.50.1

Reply via email to