aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/stmt.c15
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tls/asm-1.c7
4 files changed, 25 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b980ee6..2fc72f9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-11-29 Richard Sandiford <rsandifo@redhat.com>
+
+ * stmt.c (expand_asm_operands): Check whether force_const_mem
+ succeeded.
+
2003-11-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* config/gnu.h (HURD_TARGET_OS_CPP_BUILTINS): New.
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 34e9457db..a7c9104 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1712,13 +1712,16 @@ expand_asm_operands (tree string, tree outputs, tree inputs,
if (CONSTANT_P (op))
{
- op = force_const_mem (TYPE_MODE (type), op);
- op = validize_mem (op);
+ rtx mem = force_const_mem (TYPE_MODE (type), op);
+ if (mem)
+ op = validize_mem (mem);
+ else
+ op = force_reg (TYPE_MODE (type), op);
}
- else if (GET_CODE (op) == REG
- || GET_CODE (op) == SUBREG
- || GET_CODE (op) == ADDRESSOF
- || GET_CODE (op) == CONCAT)
+ if (GET_CODE (op) == REG
+ || GET_CODE (op) == SUBREG
+ || GET_CODE (op) == ADDRESSOF
+ || GET_CODE (op) == CONCAT)
{
tree qual_type = build_qualified_type (type,
(TYPE_QUALS (type)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 77938bd..6ef9814 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-11-29 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.dg/tls/asm-1.C: New test.
+
2003-11-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* testsuite/gcc.dg/cpp/assert4.c: Update.
diff --git a/gcc/testsuite/gcc.dg/tls/asm-1.c b/gcc/testsuite/gcc.dg/tls/asm-1.c
new file mode 100644
index 0000000..68c49f6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tls/asm-1.c
@@ -0,0 +1,7 @@
+/* { dg-options "-Werror" } */
+__thread int i;
+
+int foo ()
+{
+ asm volatile ("" :: "m" (&i)); /* { dg-error "lvalue" } */
+}