aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2002-09-16 14:34:02 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2002-09-16 14:34:02 +0000
commit28c56d256992d5d330ebec07b1e939924b8d1086 (patch)
treea944ac0264fe665e3967a1545691b375acdbdc06 /gcc
parenta41c6c533d4b1081fdb453cfa8fa5526af764151 (diff)
downloadgcc-28c56d256992d5d330ebec07b1e939924b8d1086.zip
gcc-28c56d256992d5d330ebec07b1e939924b8d1086.tar.gz
gcc-28c56d256992d5d330ebec07b1e939924b8d1086.tar.bz2
re PR c++/7015 (certain __asm__ constructs rejected)
cp: 2002-09-16 Nathan Sidwell <nathan@codesourcery.com> PR c++/7015 * semantic.c (finish_asm_stmt): Fix operand/output_operands thinko. * typeck.c (c_expand_asm_operands): Protect from error_mark_node. testsuite * g++.dg/ext/asm3.C: New test. From-SVN: r57192
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/cp/typeck.c7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ext/asm3.C13
5 files changed, 29 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index da49b54..3c3fb93 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2002-09-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/7015
+ * semantic.c (finish_asm_stmt): Fix operand/output_operands
+ thinko.
+ * typeck.c (c_expand_asm_operands): Protect from error_mark_node.
+
2002-09-15 Nathan Sidwell <nathan@codesourcery.com>
PR c++/7919
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 946f715..cae2ecd 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -929,7 +929,7 @@ finish_asm_stmt (cv_qualifier, string, output_operands,
tree operand;
constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
- operand = TREE_VALUE (output_operands);
+ operand = TREE_VALUE (t);
if (!parse_output_constraint (&constraint,
i, ninputs, noutputs,
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index abf4919..f591bc6 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -6045,9 +6045,10 @@ c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
else
{
tree type = TREE_TYPE (o[i]);
- if (CP_TYPE_CONST_P (type)
- || (IS_AGGR_TYPE_CODE (TREE_CODE (type))
- && C_TYPE_FIELDS_READONLY (type)))
+ if (type != error_mark_node
+ && (CP_TYPE_CONST_P (type)
+ || (IS_AGGR_TYPE_CODE (TREE_CODE (type))
+ && C_TYPE_FIELDS_READONLY (type))))
readonly_error (o[i], "modification by `asm'", 1);
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 48e8691..603b39d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-09-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * g++.dg/ext/asm3.C: New test.
+
2002-09-16 Richard Earnshaw <rearnsha@arm.com>
* objc.dg/bitfield-2.m (dg-options): Add -fsigned-char.
diff --git a/gcc/testsuite/g++.dg/ext/asm3.C b/gcc/testsuite/g++.dg/ext/asm3.C
new file mode 100644
index 0000000..699ab4c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/asm3.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 16 Sep 2002 <nathan@codesourcery.com>
+
+// PR 7015. ICE with asms
+
+int two(int in)
+{
+ register int out;
+ __asm__ ("" : "r" (out) : "r" (in)); // { dg-error "output operand" "" }
+ return out;
+}