[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
memcmp tests: work around the clang bug
From: |
Bruno Haible |
Subject: |
memcmp tests: work around the clang bug |
Date: |
Sat, 21 Dec 2019 05:42:07 +0100 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-166-generic; KDE/5.18.0; x86_64; ; ) |
A year ago, I committed this:
2018-12-21 Bruno Haible <address@hidden>
memcmp: Mention the clang bug.
* tests/test-memcmp.c: Add comment about a known test failure.
* doc/posix-functions/memcmp.texi: Mention the clang bug.
But a comment does not stop the test from failing :) So, here's to make it
succeed:
2019-12-21 Bruno Haible <address@hidden>
memcmp tests: Work around the clang bug.
* tests/test-memcmp.c (main): Use a volatile function pointer to disable
the clang optimization.
diff --git a/tests/test-memcmp.c b/tests/test-memcmp.c
index 5d48119..f0bddef 100644
--- a/tests/test-memcmp.c
+++ b/tests/test-memcmp.c
@@ -25,12 +25,11 @@ SIGNATURE_CHECK (memcmp, int, (void const *, void const *,
size_t));
#include "zerosize-ptr.h"
#include "macros.h"
-/* Note: This test sometimes fails when compiled by 'clang'.
- See <https://bugs.llvm.org/show_bug.cgi?id=40063>. */
-
int
main (void)
{
+ int (* volatile memcmp_ptr) (const void *, const void *, size_t) = memcmp;
+
/* Test equal / not equal distinction. */
ASSERT (memcmp (zerosize_ptr (), zerosize_ptr (), 0) == 0);
ASSERT (memcmp ("foo", "foobar", 2) == 0);
@@ -48,10 +47,13 @@ main (void)
ASSERT (memcmp ("foobar", "foo", 4) > 0);
/* Some old versions of memcmp were not 8-bit clean. */
- ASSERT (memcmp ("\100", "\201", 1) < 0);
- ASSERT (memcmp ("\201", "\100", 1) > 0);
- ASSERT (memcmp ("\200", "\201", 1) < 0);
- ASSERT (memcmp ("\201", "\200", 1) > 0);
+ /* Use the function pointer here, because otherwise this test is sometimes
+ miscompiled by 'clang'.
+ See <https://bugs.llvm.org/show_bug.cgi?id=40063>. */
+ ASSERT (memcmp_ptr ("\100", "\201", 1) < 0);
+ ASSERT (memcmp_ptr ("\201", "\100", 1) > 0);
+ ASSERT (memcmp_ptr ("\200", "\201", 1) < 0);
+ ASSERT (memcmp_ptr ("\201", "\200", 1) > 0);
/* The Next x86 OpenStep bug shows up only when comparing 16 bytes
or more and with at least one buffer not starting on a 4-byte boundary.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- memcmp tests: work around the clang bug,
Bruno Haible <=