Fix bogus failure of uninit-19.c for avr

The test fails for avr because fn1 does not get inlined into fn2. Inlining
occurs for x86_64 because fn1's computed size equals call_stmt_size. For the
avr, 32 bit memory moves are more expensive, and b[3] = p10[a] results in 
a bigger size for fn1, preventing the inlining.

Add -finline-small-functions to force early inliner to inline fn1.

gcc/testsuite/
2016-11-23  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>

	* gcc.dg/uninit-19.c: Add -finline-small-functions for avr.

From-SVN: r242742
This commit is contained in:
Senthil Kumar Selvaraj 2016-11-23 09:49:25 +00:00 committed by Senthil Kumar Selvaraj
parent a80504892e
commit baf53c4739
2 changed files with 9 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2016-11-23 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* gcc.dg/uninit-19.c: Add -finline-small-functions for avr.
2016-11-23 Jakub Jelinek <jakub@redhat.com>
PR target/78451

View File

@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O -Wuninitialized" } */
/* { dg-additional-options "-finline-small-functions" { target avr-*-* } } */
int a, l, m;
float *b;
@ -10,7 +11,7 @@ fn1 (int p1, float *f1, float *f2, float *f3, unsigned char *c1, float *f4,
unsigned char *c2, float *p10)
{
if (p1 & 8)
b[3] = p10[a]; /* 13. */
b[3] = p10[a]; /* 14. */
}
void
@ -19,8 +20,8 @@ fn2 ()
float *n;
if (l & 6)
n = &c + m;
fn1 (l, &d, &e, &g, &i, &h, &k, n); /* 22. */
fn1 (l, &d, &e, &g, &i, &h, &k, n); /* 23. */
}
/* { dg-warning "may be used uninitialized" "" { target { { nonpic } || { hppa*64*-*-* } } } 13 } */
/* { dg-warning "may be used uninitialized" "" { target { ! { { nonpic } || { hppa*64*-*-* } } } } 22 } */
/* { dg-warning "may be used uninitialized" "" { target { { nonpic } || { hppa*64*-*-* } } } 14 } */
/* { dg-warning "may be used uninitialized" "" { target { ! { { nonpic } || { hppa*64*-*-* } } } } 23 } */