From: Olivier Hainque Date: Mon, 17 Jan 2011 12:36:55 +0000 (+0000) Subject: re PR target/46655 (invalid '.line 0' directive emitted with -g) X-Git-Tag: releases/gcc-4.5.3~296 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2334e1986b4b52c05321457378e1ad588896add;p=thirdparty%2Fgcc.git re PR target/46655 (invalid '.line 0' directive emitted with -g) PR target/46655 * xcoffout.c (ASM_OUTPUT_LINE): Output line only if positive, and only if <= USHRT_MAX in 32-bit mode. Co-Authored-By: Eric Botcazou Co-Authored-By: Michael Haubenwallner From-SVN: r168898 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d4c6eb7b99b..df24a14bcbe8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-01-17 Olivier Hainque + Michael Haubenwallner + Eric Botcazou + + 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 Backport from mainline diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c index f00aee00e5ec..6ecd3039feb5 100644 --- a/gcc/xcoffout.c +++ b/gcc/xcoffout.c @@ -81,8 +81,15 @@ const char *xcoff_lastfile; #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)