The smaller int size for the avr target breaks the test's expectation on the number of iterations. The failure goes away if 32 bit ints are used in place of a plain int.
Fix by conditionally typedef int32_t to __INT32_TYPE__ for targets with int size < 4, and then use int32_t everywhere. Regards Senthil 2016-11-25 Senthil Kumar Selvaraj <senthil_kumar.selva...@atmel.com> * gcc.dg/pr64277.c: Use 32 bit int for targets with sizeof(int) < 4. Index: gcc/testsuite/gcc.dg/pr64277.c =================================================================== --- gcc/testsuite/gcc.dg/pr64277.c (revision 242857) +++ gcc/testsuite/gcc.dg/pr64277.c (working copy) @@ -4,10 +4,16 @@ /* { dg-final { scan-tree-dump "loop with 5 iterations completely unrolled" "cunroll" } } */ /* { dg-final { scan-tree-dump "loop with 6 iterations completely unrolled" "cunroll" } } */ -int f1[10]; +#if __SIZEOF_INT__ < 4 + __extension__ typedef __INT32_TYPE__ int32_t; +#else + typedef int int32_t; +#endif + +int32_t f1[10]; void test1 (short a[], short m, unsigned short l) { - int i = l; + int32_t i = l; for (i = i + 5; i < m; i++) f1[i] = a[i]++; } @@ -14,7 +20,7 @@ void test2 (short a[], short m, short l) { - int i; + int32_t i; if (m > 5) m = 5; for (i = m; i > l; i--)