diff options
author | Olivier Hainque <hainque@adacore.com> | 2011-01-17 12:35:21 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2011-01-17 12:35:21 +0000 |
commit | b9361af2c3392d6a73453af69dcc5919b6c25db3 (patch) | |
tree | 604d2d8ecad31f6580908b090884a17e811b1a56 /gcc/xcoffout.c | |
parent | f4c69f53f97ccbbd59ac62d9da712d5297580e72 (diff) | |
download | gcc-b9361af2c3392d6a73453af69dcc5919b6c25db3.zip gcc-b9361af2c3392d6a73453af69dcc5919b6c25db3.tar.gz gcc-b9361af2c3392d6a73453af69dcc5919b6c25db3.tar.bz2 |
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 <ebotcazou@adacore.com>
Co-Authored-By: Michael Haubenwallner <michael.haubenwallner@salomon.at>
From-SVN: r168897
Diffstat (limited to 'gcc/xcoffout.c')
-rw-r--r-- | gcc/xcoffout.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c index 2b29d98..84b1436 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) |