Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/20050922-1.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* This revealed a bug when rotates are expanded into two shifts. */ /* { dg-do run } */ /* { dg-options "-O1 -std=c99" } */ extern void abort (void); #if __INT_MAX__ == 2147483647 typedef unsigned int uint32_t; #elif __LONG_MAX__ == 2147483647 typedef unsigned long uint32_t; #else #error unable to find 32-bit integer type #endif uint32_t f (uint32_t *S, int j) { uint32_t A, B, k, L[2] = {1234, 5678}; int i, m; A = B = 0; for (i = 0; i < j; i++) { k = (S[i] + A + B) & 0xffffffffL; A = S[i] = ((k << (3 & 0x1f)) | ((k & 0xffffffff) >> (32 - (3 & 0x1f)))); m = (int) (A + B); k = (L[i] + A + B) & 0xffffffffL; B = L[i] = ((k << (m & 0x1f)) | ((k & 0xffffffff) >> (32 - (m & 0x1f)))); } return L[0] + L[1]; } int main () { uint32_t S[2] = {0xffff, 0xffffff}; if (f (S,2)!= 1392607300) abort(); return 0; }