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:
Jakub Jelinek 2009-01-30 21:46:32 +01:00 committed by Jakub Jelinek
parent ac9bc18b37
commit d0728ae0d8
5 changed files with 50 additions and 6 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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.

View 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" } } */

View 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" } } */