aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2002-12-19 18:06:46 +0100
committerEric Botcazou <ebotcazou@gcc.gnu.org>2002-12-19 17:06:46 +0000
commite54b4cae03726bbceb7c25c8fdcf94bfcb549504 (patch)
tree61a17f1acad917bac38601068e07d2ecf4b0bb3e
parent7f22efe1d61fc558beafecf6a364cc345f31d69e (diff)
downloadgcc-e54b4cae03726bbceb7c25c8fdcf94bfcb549504.zip
gcc-e54b4cae03726bbceb7c25c8fdcf94bfcb549504.tar.gz
gcc-e54b4cae03726bbceb7c25c8fdcf94bfcb549504.tar.bz2
re PR target/8340 (ICE on x86 inline asm w/ -fPIC)
PR target/8340 * stmt.c (expand_asm_operands): Produce an error when the PIC register is clobbered. From-SVN: r60313
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/stmt.c11
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/i386-pic-1.c18
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 073b662..eca6990 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2002-12-19 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/8340
+ * stmt.c (expand_asm_operands): Produce an error when
+ the PIC register is clobbered.
+
2002-12-18 Daniel Berlin <dberlin@dberlin.org>
* Makefile.in (OBJS): Add alloc-pool.o
diff --git a/gcc/stmt.c b/gcc/stmt.c
index af0028f..2fc608c 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1509,7 +1509,16 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
/* Mark clobbered registers. */
if (i >= 0)
- SET_HARD_REG_BIT (clobbered_regs, i);
+ {
+ /* Clobbering the PIC register is an error */
+ if ((unsigned) i == PIC_OFFSET_TABLE_REGNUM)
+ {
+ error ("PIC register `%s' clobbered in `asm'", regname);
+ return;
+ }
+
+ SET_HARD_REG_BIT (clobbered_regs, i);
+ }
}
clear_last_expr ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d5f296f..cadf26a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-12-19 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/i386-pic-1.c: New test.
+
2002-12-18 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/8099
diff --git a/gcc/testsuite/gcc.dg/i386-pic-1.c b/gcc/testsuite/gcc.dg/i386-pic-1.c
new file mode 100644
index 0000000..4c548bf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/i386-pic-1.c
@@ -0,0 +1,18 @@
+/* PR target/8340 */
+/* { dg-do compile { target i?86-*-* } } */
+/* { dg-options "-fPIC" } */
+
+int foo ()
+{
+ static int a;
+
+ __asm__ __volatile__ ( /* { dg-error "PIC register" } */
+ "xorl %%ebx, %%ebx\n"
+ "movl %%ebx, %0\n"
+ : "=m" (a)
+ :
+ : "%ebx"
+ );
+
+ return a;
+}