diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-12-03 02:47:13 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2013-12-03 02:47:13 +0000 |
commit | 4c2ecab0e4978f3a4a5b40fe595729b30375386a (patch) | |
tree | eb299deee08e7335f846ed167c65364ef8d62b64 /gcc | |
parent | f9153cba636597ca403e56a2302f05233c4e85a7 (diff) | |
download | gcc-4c2ecab0e4978f3a4a5b40fe595729b30375386a.zip gcc-4c2ecab0e4978f3a4a5b40fe595729b30375386a.tar.gz gcc-4c2ecab0e4978f3a4a5b40fe595729b30375386a.tar.bz2 |
re PR c/58235 (Missing diagnostic on assignment to array in c89)
PR c/58235
c:
* c-typeck.c (build_modify_expr): Diagnose assignment to
expression with array type.
testsuite:
* gcc.dg/c90-array-lval-8.c: New test.
From-SVN: r205615
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c/c-typeck.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c90-array-lval-8.c | 20 |
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index a106e64..42b0bb7 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2013-12-02 Joseph Myers <joseph@codesourcery.com> + + PR c/58235 + * c-typeck.c (build_modify_expr): Diagnose assignment to + expression with array type. + 2013-11-29 Joseph Myers <joseph@codesourcery.com> PR c/42262 diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index 4d70104..672a564 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -5205,6 +5205,14 @@ build_modify_expr (location_t location, tree lhs, tree lhs_origtype, if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK) return error_mark_node; + /* Ensure an error for assigning a non-lvalue array to an array in + C90. */ + if (TREE_CODE (lhstype) == ARRAY_TYPE) + { + error_at (location, "assignment to expression with array type"); + return error_mark_node; + } + /* For ObjC properties, defer this check. */ if (!objc_is_property_ref (lhs) && !lvalue_or_else (location, lhs, lv_assign)) return error_mark_node; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c79226b..f4443d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-12-02 Joseph Myers <joseph@codesourcery.com> + + PR c/58235 + * gcc.dg/c90-array-lval-8.c: New test. + 2013-12-02 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/59358 diff --git a/gcc/testsuite/gcc.dg/c90-array-lval-8.c b/gcc/testsuite/gcc.dg/c90-array-lval-8.c new file mode 100644 index 0000000..bc5b7b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c90-array-lval-8.c @@ -0,0 +1,20 @@ +/* Test for non-lvalue arrays: test that they cannot be assigned to + array variables. PR 58235. */ +/* { dg-do compile } */ +/* { dg-options "-std=iso9899:1990 -pedantic-errors" } */ + +struct s { char c[1]; } x; +struct s f (void) { return x; } + +void +g (void) +{ + char c[1]; + c = f ().c; /* { dg-error "array" } */ +} + +void +h (void) +{ + char c[1] = f ().c; /* { dg-error "array" } */ +} |