]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/46655 (invalid '.line 0' directive emitted with -g)
authorOlivier Hainque <hainque@adacore.com>
Mon, 17 Jan 2011 12:36:55 +0000 (12:36 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 17 Jan 2011 12:36:55 +0000 (12:36 +0000)
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: r168898

gcc/ChangeLog
gcc/xcoffout.c

index 3d4c6eb7b99b8c1a841f659ff13044203e7130f4..df24a14bcbe8c6189ddb9815d65030479d618c17 100644 (file)
@@ -1,3 +1,11 @@
+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
index f00aee00e5ec9c0833ab561ecc258fde2cdcbaf0..6ecd3039feb53693449dd12bb64a207a6e881caf 100644 (file)
@@ -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)