aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@gcc.gnu.org>2009-01-24 22:36:09 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-01-24 22:36:09 +0100
commit849421a3e44820ac554b6b1b625709fc0239f357 (patch)
tree8aa0cd10ba1655e3f28c1d19cd88b6abf511e564
parent82f7042142a89ec50f2b3a608a675defb9ac4675 (diff)
downloadgcc-849421a3e44820ac554b6b1b625709fc0239f357.zip
gcc-849421a3e44820ac554b6b1b625709fc0239f357.tar.gz
gcc-849421a3e44820ac554b6b1b625709fc0239f357.tar.bz2
re PR c/38957 (return of local variable pointer)
PR c/38957 * c-typeck.c (c_finish_return): Handle POINTER_PLUS_EXPR the same way as PLUS_EXPR. * gcc.dg/pr38957.c: New test. From-SVN: r143654
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-typeck.c4
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gcc.dg/pr38957.c16
4 files changed, 32 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0c957db..ecf9e46 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/38957
+ * c-typeck.c (c_finish_return): Handle POINTER_PLUS_EXPR the same way
+ as PLUS_EXPR.
+
2009-01-24 Julian Brown <julian@codesourcery.com>
* config/arm/t-linux-eabi (LIB2FUNCS_STATIC_EXTRA): Add
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 35c8d23..4b9b2b3 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -7226,8 +7226,10 @@ c_finish_return (tree retval)
{
switch (TREE_CODE (inner))
{
- CASE_CONVERT: case NON_LVALUE_EXPR:
+ CASE_CONVERT:
+ case NON_LVALUE_EXPR:
case PLUS_EXPR:
+ case POINTER_PLUS_EXPR:
inner = TREE_OPERAND (inner, 0);
continue;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7e40d4e..5425b02 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,8 +1,13 @@
-2009-01-24 David Billinghurst (billingd@gcc.gnu.org)
+2009-01-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/38957
+ * gcc.dg/pr38957.c: New test.
+
+2009-01-24 David Billinghurst <billingd@gcc.gnu.org>
PR fortran/38955
* gfortran.dg/array_constructor_24.f: Allow tolerance when
- comparing floats
+ comparing floats.
2009-01-24 Sebastian Pop <sebastian.pop@amd.com>
diff --git a/gcc/testsuite/gcc.dg/pr38957.c b/gcc/testsuite/gcc.dg/pr38957.c
new file mode 100644
index 0000000..f94cd76
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr38957.c
@@ -0,0 +1,16 @@
+/* PR c/38957 */
+/* { dg-do compile } */
+
+char *
+foo (void)
+{
+ char a[2];
+ return a+1; /* { dg-warning "returns address of local variable" } */
+}
+
+char *
+bar (void)
+{
+ char a[2];
+ return a; /* { dg-warning "returns address of local variable" } */
+}