]> sourceware.org Git - glibc.git/commitdiff
support: Expose TEST_VERIFY_EXIT behavior to GCC optimizers
authorFlorian Weimer <fweimer@redhat.com>
Fri, 9 Jun 2017 12:08:13 +0000 (14:08 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Fri, 9 Jun 2017 12:08:13 +0000 (14:08 +0200)
Previously, the implementation would conditionally exit based on the
status argument, which GCC did not know about.  This leads to
false uninitialized variable warnings when data is accessed after a
TEST_VERIFY_EXIT failure (from code which would never execute).

ChangeLog
support/check.h
support/support_test_verify_impl.c

index 006e7ac28eeae19cf705f4e0b48e3466b3c50430..0acbe88f3088df6046792ca7f4c84e2a5979fa66 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2017-06-09  Florian Weimer  <fweimer@redhat.com>
+
+       Expose TEST_VERIFY_EXIT process termination to GCC optimizers.
+       * support/support_test_verify_impl.c
+       (support_test_verify_exit_impl): Split from
+       support_test_verify_impl.
+       * support/check.h (TEST_VERIFY): Drop status argument from
+       support_test_verify_impl call.
+       (TEST_VERIFY_EXIT): Call support_test_verify_exit_impl.
+       (support_test_verify_impl): Remove status argument.
+       (support_test_verify_exit_impl): Declare.
+
 2017-06-09  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
        * sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h: Remove
index 1d244a35576a2e65f3f8e6ae372a4e59c5a341dd..bdcd12952af6c286cebc9ec0916abedff71b77ed 100644 (file)
@@ -51,7 +51,7 @@ __BEGIN_DECLS
     if (expr)                                                   \
       ;                                                         \
     else                                                        \
-      support_test_verify_impl (-1, __FILE__, __LINE__, #expr); \
+      support_test_verify_impl (__FILE__, __LINE__, #expr);     \
   })
 
 /* Record a test failure and exit if EXPR evaluates to false.  */
@@ -60,7 +60,8 @@ __BEGIN_DECLS
     if (expr)                                                   \
       ;                                                         \
     else                                                        \
-      support_test_verify_impl (1, __FILE__, __LINE__, #expr);  \
+      support_test_verify_exit_impl                             \
+        (1, __FILE__, __LINE__, #expr);                         \
   })
 
 int support_print_failure_impl (const char *file, int line,
@@ -70,8 +71,11 @@ void support_exit_failure_impl (int exit_status,
                                 const char *file, int line,
                                 const char *format, ...)
   __attribute__ ((noreturn, nonnull (2), format (printf, 4, 5)));
-void support_test_verify_impl (int status, const char *file, int line,
+void support_test_verify_impl (const char *file, int line,
                                const char *expr);
+void support_test_verify_exit_impl (int status, const char *file, int line,
+                                    const char *expr)
+  __attribute__ ((noreturn));
 
 /* Record a test failure.  This function returns and does not
    terminate the process.  The failure counter is stored in a shared
index 5bae38f8b1b04e93a01b253d7ea64eedbc0b4126..55ab2111b3d0d7dcb032f8483d18cb1d45b12513 100644 (file)
 #include <stdlib.h>
 
 void
-support_test_verify_impl (int status, const char *file, int line,
-                          const char *expr)
+support_test_verify_impl (const char *file, int line, const char *expr)
 {
   support_record_failure ();
   printf ("error: %s:%d: not true: %s\n", file, line, expr);
-  if (status >= 0)
-    exit (status);
+}
 
+void
+support_test_verify_exit_impl (int status, const char *file, int line,
+                               const char *expr)
+{
+  support_test_verify_impl (file, line, expr);
+  exit (status);
 }
This page took 0.149552 seconds and 5 git commands to generate.