<dejagnu.h> assumed -fgnu89-inline until a recent upstream fix;
see http://lists.gnu.org/archive/html/dejagnu/2014-10/msg00011.html

Remove the workaround from jit.exp that used -fgnu89-inline
in favor of a fixincludes to dejagnu.h that applies the upstream fix
to a local copy.

This should make it easier to support C++ testcases from jit.exp.

(I also needed to fix up the jit.dg/test-threads.c due to the
preprocessor tricks that that test plays in order to make
dejagnu.h be threadsafe).

This is the first time I've touched the "fixincludes" directory;
is this the correct way to make a change here?

Successfully bootstrapped & regrtested on x86_64-unknown-linux-gnu
(Fedora 20).

OK for trunk?

fixincludes/ChangeLog:
        PR other/63613
        * inclhack.def (dejagnu_h_make_inline_functions_static): New fix.
        * fixincl.x: Regenerate.
        * tests/base/dejagnu.h: New.

gcc/testsuite/ChangeLog:
        PR other/63613
        * jit.dg/jit.exp (DEFAULT_CFLAGS): Remove the -fgnu89-inline
        workaround for older versions of dejagnu.h in favor of using
        fixincludes.
        * jit.dg/test-threads.c (dejagnu_pass): Make static.
        (dejagnu_fail): Likewise.
        (dejagnu_note): Likewise.
        (pass): Likewise.
        (fail): Likewise.
        (note): Likewise.
---
 fixincludes/fixincl.x               | 48 ++++++++++++++++++++++++++++++-------
 fixincludes/inclhack.def            | 21 ++++++++++++++++
 fixincludes/tests/base/dejagnu.h    | 17 +++++++++++++
 gcc/testsuite/jit.dg/jit.exp        |  5 ----
 gcc/testsuite/jit.dg/test-threads.c | 12 +++++-----
 5 files changed, 84 insertions(+), 19 deletions(-)
 create mode 100644 fixincludes/tests/base/dejagnu.h

diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x
index eb98f44..980b0d3 100644
--- a/fixincludes/fixincl.x
+++ b/fixincludes/fixincl.x
@@ -1,12 +1,12 @@
 /*  -*- buffer-read-only: t -*- vi: set ro:
- * 
+ *
  * DO NOT EDIT THIS FILE   (fixincl.x)
- * 
- * It has been AutoGen-ed  October 21, 2014 at 10:18:16 AM by AutoGen 5.16.2
+ *
+ * It has been AutoGen-ed  December  3, 2014 at 04:00:25 PM by AutoGen 5.18
  * From the definitions    inclhack.def
  * and the template file   fixincl
  */
-/* DO NOT SVN-MERGE THIS FILE, EITHER Tue Oct 21 10:18:17 CEST 2014
+/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Dec  3 16:00:25 EST 2014
  *
  * You must regenerate it.  Use the ./genfixes script.
  *
@@ -15,7 +15,7 @@
  * certain ANSI-incompatible system header files which are fixed to work
  * correctly with ANSI C and placed in a directory that GNU C will search.
  *
- * This file contains 223 fixup descriptions.
+ * This file contains 224 fixup descriptions.
  *
  * See README for more information.
  *
@@ -9147,6 +9147,32 @@ static const char* apzX11_SprintfPatch[] = {
 #endif /* !defined __STDC__ */",
     (char*)NULL };
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Description of Dejagnu_H_Make_Inline_Functions_Static fix
+ */
+tSCC zDejagnu_H_Make_Inline_Functions_StaticName[] =
+     "dejagnu_h_make_inline_functions_static";
+
+/*
+ *  File name selection pattern
+ */
+tSCC zDejagnu_H_Make_Inline_Functions_StaticList[] =
+  "dejagnu.h\0";
+/*
+ *  Machine/OS name selection pattern
+ */
+#define apzDejagnu_H_Make_Inline_Functions_StaticMachs (const char**)NULL
+#define DEJAGNU_H_MAKE_INLINE_FUNCTIONS_STATIC_TEST_CT  0
+#define aDejagnu_H_Make_Inline_Functions_StaticTests   (tTestDesc*)NULL
+
+/*
+ *  Fix Command Arguments for Dejagnu_H_Make_Inline_Functions_Static
+ */
+static const char* apzDejagnu_H_Make_Inline_Functions_StaticPatch[] = { 
sed_cmd_z,
+    "-e", "s@^inline void$@static inline void@",
+    (char*)NULL };
+
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -9154,7 +9180,7 @@ static const char* apzX11_SprintfPatch[] = {
  */
 #define REGEX_COUNT          260
 #define MACH_LIST_SIZE_LIMIT 187
-#define FIX_COUNT            223
+#define FIX_COUNT            224
 
 /*
  *  Enumerate the fixes
@@ -9382,7 +9408,8 @@ typedef enum {
     X11_CLASS_FIXIDX,
     X11_CLASS_USAGE_FIXIDX,
     X11_NEW_FIXIDX,
-    X11_SPRINTF_FIXIDX
+    X11_SPRINTF_FIXIDX,
+    DEJAGNU_H_MAKE_INLINE_FUNCTIONS_STATIC_FIXIDX
 } t_fixinc_idx;
 
 tFixDesc fixDescList[ FIX_COUNT ] = {
@@ -10499,5 +10526,10 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
   {  zX11_SprintfName,    zX11_SprintfList,
      apzX11_SprintfMachs,
      X11_SPRINTF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
-     aX11_SprintfTests,   apzX11_SprintfPatch, 0 }
+     aX11_SprintfTests,   apzX11_SprintfPatch, 0 },
+
+  {  zDejagnu_H_Make_Inline_Functions_StaticName,    
zDejagnu_H_Make_Inline_Functions_StaticList,
+     apzDejagnu_H_Make_Inline_Functions_StaticMachs,
+     DEJAGNU_H_MAKE_INLINE_FUNCTIONS_STATIC_TEST_CT, FD_MACH_ONLY,
+     aDejagnu_H_Make_Inline_Functions_StaticTests,   
apzDejagnu_H_Make_Inline_Functions_StaticPatch, 0 }
 };
diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def
index b27f163..66821ef 100644
--- a/fixincludes/inclhack.def
+++ b/fixincludes/inclhack.def
@@ -4738,4 +4738,25 @@ fix = {
 
     test_text = "extern char *\tsprintf();";
 };
+
+/*
+ * PR other/63613
+ * Old versions of dejagnu.h relied on gnu89 inline semantics.
+ * DejaGnu fixed this in ad36659ffa984a0541cfc2bd27f393e0d7d173a7
+ * by making the various "inline void" functions be "static inline void".
+ * Replicate that fix locally, if needed.
+ */
+fix = {
+    hackname = dejagnu_h_make_inline_functions_static;
+    files = dejagnu.h;
+
+    sed = 's@^inline void$'
+           '@static inline void@';
+
+    test_text =
+    "inline void\n"
+    "pass (const char* fmt, ...)\n"
+    "{ /* snip */ }\n";
+
+};
 /*EOF*/
diff --git a/fixincludes/tests/base/dejagnu.h b/fixincludes/tests/base/dejagnu.h
new file mode 100644
index 0000000..7b7a389
--- /dev/null
+++ b/fixincludes/tests/base/dejagnu.h
@@ -0,0 +1,17 @@
+/*  DO NOT EDIT THIS FILE.
+
+    It has been auto-edited by fixincludes from:
+
+       "fixinc/tests/inc/dejagnu.h"
+
+    This had to be done to correct non-standard usages in the
+    original, manufacturer supplied header file.  */
+
+
+
+#if defined( DEJAGNU_H_MAKE_INLINE_FUNCTIONS_STATIC_CHECK )
+static inline void
+pass (const char* fmt, ...)
+{ /* snip */ }
+
+#endif  /* DEJAGNU_H_MAKE_INLINE_FUNCTIONS_STATIC_CHECK */
diff --git a/gcc/testsuite/jit.dg/jit.exp b/gcc/testsuite/jit.dg/jit.exp
index 438aabd..e342ba0 100644
--- a/gcc/testsuite/jit.dg/jit.exp
+++ b/gcc/testsuite/jit.dg/jit.exp
@@ -393,11 +393,6 @@ proc jit-dg-test { prog do_what extra_tool_flags } {
 # so that the JIT-built code can call into functions from the main program.
 set DEFAULT_CFLAGS "-I$srcdir/../jit -lgccjit -g -Wall -Werror 
-Wl,--export-dynamic"
 
-# <dejagnu.h> assumes -fgnu89-inline
-# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63613
-# and http://lists.gnu.org/archive/html/dejagnu/2014-10/msg00011.html
-append DEFAULT_CFLAGS " -fgnu89-inline"
-
 # Main loop.  This will invoke jig-dg-test on each test-*.c file.
 dg-runtest $tests "" $DEFAULT_CFLAGS
 
diff --git a/gcc/testsuite/jit.dg/test-threads.c 
b/gcc/testsuite/jit.dg/test-threads.c
index 7c248cc..09d5b53 100644
--- a/gcc/testsuite/jit.dg/test-threads.c
+++ b/gcc/testsuite/jit.dg/test-threads.c
@@ -20,14 +20,14 @@ static pthread_mutex_t dg_mutex = PTHREAD_MUTEX_INITIALIZER;
    harness.h injects macros before including <dejagnu.h> so that the
    pass/fail functions become "dejagnu_pass"/"dejagnu_fail" etc.  */
 
-void dejagnu_pass (const char* fmt, ...);
-void dejagnu_fail (const char* fmt, ...);
-void dejagnu_note (const char* fmt, ...);
+static void dejagnu_pass (const char* fmt, ...);
+static void dejagnu_fail (const char* fmt, ...);
+static void dejagnu_note (const char* fmt, ...);
 
 /* We now provide our own implementations of "pass"/"fail"/"note", which
    call the underlying dejagnu implementations, but with a mutex.  */
 
-inline void
+static inline void
 pass (const char* fmt, ...)
 {
   va_list ap;
@@ -42,7 +42,7 @@ pass (const char* fmt, ...)
   pthread_mutex_unlock (&dg_mutex);
 }
 
-inline void
+static inline void
 fail (const char* fmt, ...)
 {
   va_list ap;
@@ -57,7 +57,7 @@ fail (const char* fmt, ...)
   pthread_mutex_unlock (&dg_mutex);
 }
 
-inline void
+static inline void
 note (const char* fmt, ...)
 {
   va_list ap;
-- 
1.8.5.3

Reply via email to