From e7139ef3eb27ccc94d63dcdeaa232a4fe5a59162 Mon Sep 17 00:00:00 2001 From: bonzini Date: Thu, 29 Sep 2005 14:53:39 +0000 Subject: [PATCH] gcc: 2005-09-29 Paolo Bonzini PR c/21419 * gimplify.c (gimplify_asm_expr): Raise an error if an output is read-only. testsuite: 2005-09-29 Paolo Bonzini PR c/21419 * gcc.dg/pr21419.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104774 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/gimplify.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr21419.c | 15 +++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr21419.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fb6640308a1..2d793e03d12 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-29 Paolo Bonzini + + PR c/21419 + * gimplify.c (gimplify_asm_expr): Raise an error if an output is + read-only. + 2005-09-29 Steven Bosscher PR tree-optimization/23911 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 42b8740d083..e5d50e29ee7 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3544,6 +3544,12 @@ gimplify_asm_expr (tree *expr_p, tree *pre_p, tree *post_p) parse_output_constraint (&constraint, i, 0, 0, &allows_mem, &allows_reg, &is_inout); + if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (link)))) + { + error ("invalid lvalue in asm output %d", i); + ret = GS_ERROR; + } + if (!allows_reg && allows_mem) lang_hooks.mark_addressable (TREE_VALUE (link)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6146c2387f6..e279840cbb2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-29 Paolo Bonzini + + PR c/21419 + * gcc.dg/pr21419.c: New test. + 2005-09-29 Steven Bosscher * gcc.dg/pr23911.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr21419.c b/gcc/testsuite/gcc.dg/pr21419.c new file mode 100644 index 00000000000..f1e9cb92468 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr21419.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +const int i = 0; + +void f(void) +{ + __asm__ __volatile__ ("" : "=m" (i)); /* { dg-error "invalid lvalue in asm output" } */ + +} + +void g(const int set) +{ + __asm__ __volatile__ ("" : "=r" (set)); /* { dg-error "invalid lvalue in asm output" } */ +} + + -- 2.11.4.GIT