+2011-01-17 Olivier Hainque <hainque@adacore.com>
+ Michael Haubenwallner <michael.haubenwallner@salomon.at>
+ Eric Botcazou <ebotcazou@adacore.com>
+
+ PR target/46655
+ * xcoffout.c (ASM_OUTPUT_LINE): Output line only if positive, and only
+ if <= USHRT_MAX in 32-bit mode.
+
2011-01-17 Richard Guenther <rguenther@suse.de>
Backport from mainline
#define ASM_OUTPUT_LINE(FILE,LINENUM) \
do \
{ \
+ /* Make sure we're in a function and prevent output of .line 0, as \
+ line # 0 is meant for symbol addresses in xcoff. Additionally, \
+ line numbers are 'unsigned short' in 32-bit mode. */ \
if (xcoff_begin_function_line >= 0) \
- fprintf (FILE, "\t.line\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)); \
+ { \
+ int lno = ABS_OR_RELATIVE_LINENO (LINENUM); \
+ if (lno > 0 && (TARGET_64BIT || lno <= (int)USHRT_MAX)) \
+ fprintf (FILE, "\t.line\t%d\n", lno); \
+ } \
} \
while (0)