re PR target/39013 (Missing @PLT when -fpie is used)
PR target/39013 * c-decl.c (pop_scope): Set DECL_EXTERNAL for functions declared inline but never defined. * gcc.target/i386/pr39013-1.c: New test. * gcc.target/i386/pr39013-2.c: New test. From-SVN: r143803
This commit is contained in:
parent
ac9bc18b37
commit
d0728ae0d8
@ -1,3 +1,9 @@
|
||||
2009-01-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/39013
|
||||
* c-decl.c (pop_scope): Set DECL_EXTERNAL for functions declared
|
||||
inline but never defined.
|
||||
|
||||
2009-01-30 Wolfgang Gellerich <gellerich@de,ibm.com>
|
||||
|
||||
* config/s390/s390.md (*insv<mode>_reg_extimm): Removed.
|
||||
|
16
gcc/c-decl.c
16
gcc/c-decl.c
@ -781,14 +781,18 @@ pop_scope (void)
|
||||
error ("nested function %q+D declared but never defined", p);
|
||||
undef_nested_function = true;
|
||||
}
|
||||
/* C99 6.7.4p6: "a function with external linkage... declared
|
||||
with an inline function specifier ... shall also be defined in the
|
||||
same translation unit." */
|
||||
else if (DECL_DECLARED_INLINE_P (p)
|
||||
&& TREE_PUBLIC (p)
|
||||
&& !DECL_INITIAL (p)
|
||||
&& !flag_gnu89_inline)
|
||||
pedwarn (input_location, 0, "inline function %q+D declared but never defined", p);
|
||||
&& !DECL_INITIAL (p))
|
||||
{
|
||||
/* C99 6.7.4p6: "a function with external linkage... declared
|
||||
with an inline function specifier ... shall also be defined
|
||||
in the same translation unit." */
|
||||
if (!flag_gnu89_inline)
|
||||
pedwarn (input_location, 0,
|
||||
"inline function %q+D declared but never defined", p);
|
||||
DECL_EXTERNAL (p) = 1;
|
||||
}
|
||||
|
||||
goto common_symbol;
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
2009-01-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/39013
|
||||
* gcc.target/i386/pr39013-1.c: New test.
|
||||
* gcc.target/i386/pr39013-2.c: New test.
|
||||
|
||||
PR c++/39028
|
||||
* g++.dg/ext/label12.C: New test.
|
||||
|
||||
|
15
gcc/testsuite/gcc.target/i386/pr39013-1.c
Normal file
15
gcc/testsuite/gcc.target/i386/pr39013-1.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* PR target/39013 */
|
||||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fpie -std=gnu89" } */
|
||||
|
||||
inline int foo (void);
|
||||
extern inline int bar (void);
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return foo () + bar ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "foo@PLT" } } */
|
||||
/* { dg-final { scan-assembler "bar@PLT" } } */
|
15
gcc/testsuite/gcc.target/i386/pr39013-2.c
Normal file
15
gcc/testsuite/gcc.target/i386/pr39013-2.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* PR target/39013 */
|
||||
/* { dg-do compile { target *-*-linux* } } */
|
||||
/* { dg-options "-O2 -fpie -std=gnu99" } */
|
||||
|
||||
inline int foo (void); /* { dg-warning "declared but never defined" } */
|
||||
extern inline int bar (void); /* { dg-warning "declared but never defined" } */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return foo () + bar ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "foo@PLT" } } */
|
||||
/* { dg-final { scan-assembler "bar@PLT" } } */
|
Loading…
Reference in New Issue
Block a user