aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-10-19 16:24:39 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-10-19 16:24:39 +0200
commitd969783705f55506c111e4f4d0342b09ef301ea2 (patch)
tree35137fd3ab0e4e10028a005e2479124b10726f70 /gcc
parentdb62ad7c66e97b45a4286932bcab3926bd571227 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/typeck.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C18
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);
+}