re PR middle-end/51768 (ICE with invalid asm goto)
PR middle-end/51768 * stmt.c (check_unique_operand_names): Don't ICE during error reporting if i is from labels chain. * c-c++-common/pr51768.c: New test. From-SVN: r182921
This commit is contained in:
parent
1e69d24e61
commit
36363ebb88
4 changed files with 38 additions and 7 deletions
|
@ -1,5 +1,9 @@
|
|||
2012-01-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/51768
|
||||
* stmt.c (check_unique_operand_names): Don't ICE during error
|
||||
reporting if i is from labels chain.
|
||||
|
||||
PR middle-end/44777
|
||||
* profile.c (branch_prob): Split bbs that have exit edge
|
||||
and need a fake entry edge too.
|
||||
|
|
13
gcc/stmt.c
13
gcc/stmt.c
|
@ -1,7 +1,7 @@
|
|||
/* Expands front end tree to back end RTL for GCC
|
||||
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
|
||||
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||
2010 Free Software Foundation, Inc.
|
||||
2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -1253,11 +1253,11 @@ check_operand_nalternatives (tree outputs, tree inputs)
|
|||
static bool
|
||||
check_unique_operand_names (tree outputs, tree inputs, tree labels)
|
||||
{
|
||||
tree i, j;
|
||||
tree i, j, i_name = NULL_TREE;
|
||||
|
||||
for (i = outputs; i ; i = TREE_CHAIN (i))
|
||||
{
|
||||
tree i_name = TREE_PURPOSE (TREE_PURPOSE (i));
|
||||
i_name = TREE_PURPOSE (TREE_PURPOSE (i));
|
||||
if (! i_name)
|
||||
continue;
|
||||
|
||||
|
@ -1268,7 +1268,7 @@ check_unique_operand_names (tree outputs, tree inputs, tree labels)
|
|||
|
||||
for (i = inputs; i ; i = TREE_CHAIN (i))
|
||||
{
|
||||
tree i_name = TREE_PURPOSE (TREE_PURPOSE (i));
|
||||
i_name = TREE_PURPOSE (TREE_PURPOSE (i));
|
||||
if (! i_name)
|
||||
continue;
|
||||
|
||||
|
@ -1282,7 +1282,7 @@ check_unique_operand_names (tree outputs, tree inputs, tree labels)
|
|||
|
||||
for (i = labels; i ; i = TREE_CHAIN (i))
|
||||
{
|
||||
tree i_name = TREE_PURPOSE (i);
|
||||
i_name = TREE_PURPOSE (i);
|
||||
if (! i_name)
|
||||
continue;
|
||||
|
||||
|
@ -1297,8 +1297,7 @@ check_unique_operand_names (tree outputs, tree inputs, tree labels)
|
|||
return true;
|
||||
|
||||
failure:
|
||||
error ("duplicate asm operand name %qs",
|
||||
TREE_STRING_POINTER (TREE_PURPOSE (TREE_PURPOSE (i))));
|
||||
error ("duplicate asm operand name %qs", TREE_STRING_POINTER (i_name));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2012-01-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/51768
|
||||
* c-c++-common/pr51768.c: New test.
|
||||
|
||||
PR middle-end/44777
|
||||
* gcc.dg/tree-prof/pr44777.c: New test.
|
||||
|
||||
|
|
25
gcc/testsuite/c-c++-common/pr51768.c
Normal file
25
gcc/testsuite/c-c++-common/pr51768.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* PR middle-end/51768 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "" } */
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
asm goto ("" : : : : lab, lab, lab2, lab); /* { dg-error "duplicate asm operand name" } */
|
||||
lab:;
|
||||
lab2:;
|
||||
}
|
||||
|
||||
void
|
||||
bar (void)
|
||||
{
|
||||
asm goto ("" : : [lab] "i" (0) : : lab); /* { dg-error "duplicate asm operand name" } */
|
||||
lab:;
|
||||
}
|
||||
|
||||
void
|
||||
baz (void)
|
||||
{
|
||||
int x;
|
||||
asm ("" : [lab] "=r" (x) : [lab] "r" (x)); /* { dg-error "duplicate asm operand name" } */
|
||||
}
|
Loading…
Add table
Reference in a new issue