https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81471

--- Comment #2 from Gian-Carlo Pascutto <gcp at sjeng dot org> ---
#include <stdint.h>

inline uint32_t rotl(const uint32_t x, const int k) {
    return (x << k) | (x >> (32 - k));
}

uint64_t s[2];

uint64_t random(void) {
    const uint64_t s0 = s[0];
    uint64_t s1 = s[1];
    const uint64_t result = s0 + s1;

    s1 ^= s0;
    s[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); 
    s[1] = rotl(s1, 36);

    return result;
}

int main(void) {
  int x = random();
  return 0;
}

According to https://godbolt.org/g/8CVJ9a this is broken in all current gcc
versions, not just 5.4.0.

Reply via email to