final.c (call_from_call_insn): New.

2008-07-30  Rafael Avila de Espindola  <espindola@google.com>

       * final.c (call_from_call_insn): New.
       (final_scan_insn): Call assemble_external on FUNCTION_DECLs.

2008-07-30  Rafael Avila de Espindola  <espindola@google.com>

	* gcc.dg/visibility-14.c: New test.
	* gcc.dg/visibility-15.c: New test.
	* gcc.dg/visibility-16.c: New test.
	* gcc.dg/visibility-17.c: New test.
	* gcc.dg/visibility-18.c: New test.
	* gcc.dg/visibility-19.c: New test.

From-SVN: r138310
This commit is contained in:
Rafael Avila de Espindola 2008-07-30 13:59:58 +00:00 committed by Rafael Espindola
parent e44c800e35
commit f410e1b3d2
3 changed files with 53 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2008-07-30 Rafael Avila de Espindola <espindola@google.com>
* final.c (call_from_call_insn): New.
(final_scan_insn): Call assemble_external on FUNCTION_DECLs.
2008-07-30 Paolo Bonzini <bonzini@gnu.org>
* configure.ac: Substitute ADA_CFLAGS.

View File

@ -1744,6 +1744,31 @@ output_alternate_entry_point (FILE *file, rtx insn)
}
}
/* Given a CALL_INSN, find and return the nested CALL. */
static rtx
call_from_call_insn (rtx insn)
{
rtx x;
gcc_assert (CALL_P (insn));
x = PATTERN (insn);
while (GET_CODE (x) != CALL)
{
switch (GET_CODE (x))
{
default:
gcc_unreachable ();
case PARALLEL:
x = XVECEXP (x, 0, 0);
break;
case SET:
x = XEXP (x, 1);
break;
}
}
return x;
}
/* The final scan for one insn, INSN.
Args are same as in `final', except that INSN
is the insn being scanned.
@ -2609,6 +2634,20 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
targetm.asm_out.unwind_emit (asm_out_file, insn);
#endif
if (CALL_P (insn))
{
rtx x = call_from_call_insn (insn);
x = XEXP (x, 0);
if (x && MEM_P (x) && GET_CODE (XEXP (x, 0)) == SYMBOL_REF)
{
tree t;
x = XEXP (x, 0);
t = SYMBOL_REF_DECL (x);
if (t)
assemble_external (t);
}
}
/* Output assembler code from the template. */
output_asm_insn (templ, recog_data.operand);

View File

@ -1,3 +1,12 @@
2008-07-30 Rafael Avila de Espindola <espindola@google.com>
* gcc.dg/visibility-14.c: New test.
* gcc.dg/visibility-15.c: New test.
* gcc.dg/visibility-16.c: New test.
* gcc.dg/visibility-17.c: New test.
* gcc.dg/visibility-18.c: New test.
* gcc.dg/visibility-19.c: New test.
2008-07-30 Dodji Seketeli <dseketel@redhat.com>
PR c++/36767