diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-10-19 16:24:39 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-10-19 16:24:39 +0200 |
commit | d969783705f55506c111e4f4d0342b09ef301ea2 (patch) | |
tree | 35137fd3ab0e4e10028a005e2479124b10726f70 /gcc | |
parent | db62ad7c66e97b45a4286932bcab3926bd571227 (diff) | |
download | gcc-d969783705f55506c111e4f4d0342b09ef301ea2.zip gcc-d969783705f55506c111e4f4d0342b09ef301ea2.tar.gz gcc-d969783705f55506c111e4f4d0342b09ef301ea2.tar.bz2 |
re PR c++/82600 (Address of local variable returned [-Werror=return-local-addr] when building mozilla-central)
PR c++/82600
* typeck.c (check_return_expr): Don't call
maybe_warn_about_returning_address_of_local in templates.
* g++.dg/warn/Wreturn-local-addr-4.C: New test.
From-SVN: r253899
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C | 18 |
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index daf302f..9592c83 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2017-10-19 Jakub Jelinek <jakub@redhat.com> + + PR c++/82600 + * typeck.c (check_return_expr): Don't call + maybe_warn_about_returning_address_of_local in templates. + 2017-10-17 Nathan Sidwell <nathan@acm.org> PR c++/82560 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 08b2ae5..19fbe3c 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -9228,7 +9228,8 @@ check_return_expr (tree retval, bool *no_warning) && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR) retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval, TREE_OPERAND (retval, 0)); - else if (maybe_warn_about_returning_address_of_local (retval)) + else if (!processing_template_decl + && maybe_warn_about_returning_address_of_local (retval)) retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval, build_zero_cst (TREE_TYPE (retval))); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1488f6f..3b2f638 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-10-19 Jakub Jelinek <jakub@redhat.com> + + PR c++/82600 + * g++.dg/warn/Wreturn-local-addr-4.C: New test. + 2017-10-19 Eric Botcazou <ebotcazou@adacore.com> * gcc.dg/debug/dwarf2/sso.c: Rename into... diff --git a/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C b/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C new file mode 100644 index 0000000..492dcb9 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C @@ -0,0 +1,18 @@ +// PR c++/82600 +// { dg-do compile } + +void *b[10]; + +template <int N> +void ** +foo (int x) +{ + void **a = b; // { dg-bogus "address of local variable 'a' returned" } + return &a[x]; +} + +void ** +bar (int x) +{ + return foo <0> (x); +} |