re PR c/5609 (ICE on named operands in inline assembler)
PR c/5609 * stmt.c (resolve_operand_name_1): Take more care with mixed named and unnamed operands. * gcc.dg/asm-4.c: Add case with an unnamed operand in the middle. From-SVN: r49560
This commit is contained in:
parent
448f456d7a
commit
edd1967d0c
4 changed files with 25 additions and 6 deletions
|
@ -1,3 +1,9 @@
|
|||
2002-02-06 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR c/5609
|
||||
* stmt.c (resolve_operand_name_1): Take more care with mixed
|
||||
named and unnamed operands.
|
||||
|
||||
2002-02-06 Janis Johnson <janis187@us.ibm.com>
|
||||
Jan Hubicka <jh@suse.cz>
|
||||
|
||||
|
|
20
gcc/stmt.c
20
gcc/stmt.c
|
@ -2149,15 +2149,23 @@ resolve_operand_name_1 (p, outputs, inputs)
|
|||
/* Resolve the name to a number. */
|
||||
for (op = 0, t = outputs; t ; t = TREE_CHAIN (t), op++)
|
||||
{
|
||||
const char *c = IDENTIFIER_POINTER (TREE_PURPOSE (TREE_PURPOSE (t)));
|
||||
if (strncmp (c, p + 1, len) == 0 && c[len] == '\0')
|
||||
goto found;
|
||||
tree id = TREE_PURPOSE (TREE_PURPOSE (t));
|
||||
if (id)
|
||||
{
|
||||
const char *c = IDENTIFIER_POINTER (id);
|
||||
if (strncmp (c, p + 1, len) == 0 && c[len] == '\0')
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
for (t = inputs; t ; t = TREE_CHAIN (t), op++)
|
||||
{
|
||||
const char *c = IDENTIFIER_POINTER (TREE_PURPOSE (TREE_PURPOSE (t)));
|
||||
if (strncmp (c, p + 1, len) == 0 && c[len] == '\0')
|
||||
goto found;
|
||||
tree id = TREE_PURPOSE (TREE_PURPOSE (t));
|
||||
if (id)
|
||||
{
|
||||
const char *c = IDENTIFIER_POINTER (id);
|
||||
if (strncmp (c, p + 1, len) == 0 && c[len] == '\0')
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
|
||||
*q = '\0';
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2002-02-06 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* gcc.dg/asm-4.c: Add case with an unnamed operand in the middle.
|
||||
|
||||
2002-02-06 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* gcc.dg/20020206-1.c: New test.
|
||||
|
|
|
@ -8,6 +8,7 @@ int main()
|
|||
asm volatile ("test0 X%0Y%[arg]Z" : [arg] "=g" (x));
|
||||
asm volatile ("test1 X%[out]Y%[in]Z" : [out] "=g" (y) : [in] "0"(y));
|
||||
asm volatile ("test2 X%a0Y%a[arg]Z" : : [arg] "p" (&z));
|
||||
asm volatile ("test3 %[in]" : [inout] "=g"(x) : "[inout]" (x), [in] "g" (y));
|
||||
}
|
||||
|
||||
/* ??? Someone explain why the back reference dosn't work. */
|
||||
|
|
Loading…
Add table
Reference in a new issue