From: Victor Stinner Date: Fri, 12 Dec 2014 12:19:00 +0000 (+0100) Subject: Issue #18028: Fix aliasing issue in READ_TIMESTAMP() of ceval.c on x86_64, X-Git-Tag: v2.7.10rc1~271 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b565bb6f3112644b4b53278513f4fe7f501d536;p=python Issue #18028: Fix aliasing issue in READ_TIMESTAMP() of ceval.c on x86_64, when Python is configure with --with-tsc. Patch written by Christian Heimes. --- diff --git a/Python/ceval.c b/Python/ceval.c index 682a1e7e48..fa6bb60517 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -66,9 +66,11 @@ ppc_getcounter(uint64 *v) even in 64-bit mode, we need to use "a" and "d" for the lower and upper 32-bit pieces of the result. */ -#define READ_TIMESTAMP(val) \ - __asm__ __volatile__("rdtsc" : \ - "=a" (((int*)&(val))[0]), "=d" (((int*)&(val))[1])); +#define READ_TIMESTAMP(val) do { \ + unsigned int h, l; \ + __asm__ __volatile__("rdtsc" : "=a" (l), "=d" (h)); \ + (val) = ((uint64)l) | (((uint64)h) << 32); \ + } while(0) #else