re PR c++/89187 (ICE in initialize_argument_information, at calls.c:2023)
authorJakub Jelinek <jakub@gcc.gnu.org>
Tue, 5 Feb 2019 22:28:25 +0000 (23:28 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 5 Feb 2019 22:28:25 +0000 (23:28 +0100)
PR c++/89187
* optimize.c (maybe_thunk_body): Clear TREE_ADDRESSABLE on
PARM_DECLs of the thunk.
* lambda.c (maybe_add_lambda_conv_op): Likewise.

* g++.dg/opt/pr89187.C: New test.

From-SVN: r268564

gcc/cp/ChangeLog
gcc/cp/lambda.c
gcc/cp/optimize.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr89187.C [new file with mode: 0644]

index 8ebbc1266ed939664a0e66ea030a8cc95a771c16..660d746ef7444976345dbaf593d056d1c97f6e4a 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/89187
+       * optimize.c (maybe_thunk_body): Clear TREE_ADDRESSABLE on
+       PARM_DECLs of the thunk.
+       * lambda.c (maybe_add_lambda_conv_op): Likewise.
+
 2019-02-05  Marek Polacek  <polacek@redhat.com>
 
        PR c++/89158 - by-value capture of constexpr variable broken.
index c31b06e2b1ef4b10165a096da1fb420da21f4726..2290fe0efeec70ef251bc7a44f70be54233af1e6 100644 (file)
@@ -1130,6 +1130,9 @@ maybe_add_lambda_conv_op (tree type)
       {
        tree new_node = copy_node (src);
 
+       /* Clear TREE_ADDRESSABLE on thunk arguments.  */
+       TREE_ADDRESSABLE (new_node) = 0;
+
        if (!fn_args)
          fn_args = tgt = new_node;
        else
index 7b6edfc0e4936579b5b1b2624394a07c2301ac47..aace7dea6841133e5543cb3bfc984535065eda43 100644 (file)
@@ -417,6 +417,8 @@ maybe_thunk_body (tree fn, bool force)
                  gcc_assert (clone_parm);
                  DECL_ABSTRACT_ORIGIN (clone_parm) = NULL;
                  args[parmno] = clone_parm;
+                 /* Clear TREE_ADDRESSABLE on thunk arguments.  */
+                 TREE_ADDRESSABLE (clone_parm) = 0;
                  clone_parm = TREE_CHAIN (clone_parm);
                }
              if (fn_parm_typelist)
index 616741669fa4ad38a47b0af113fb31d5b3a0845f..ac70c7281399a1e06001519759422ebd4264814c 100644 (file)
@@ -1,4 +1,9 @@
-2019-02-05  Andrea Corallo <andrea.corallo@arm.com>
+2019-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/89187
+       * g++.dg/opt/pr89187.C: New test.
+
+2019-02-05  Andrea Corallo  <andrea.corallo@arm.com>
 
        * jit.dg/add-driver-options-testlib.c: Add support file for
        test-add-driver-options.c testcase.
diff --git a/gcc/testsuite/g++.dg/opt/pr89187.C b/gcc/testsuite/g++.dg/opt/pr89187.C
new file mode 100644 (file)
index 0000000..3e24a8f
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/89187
+// { dg-do compile { target c++11 } }
+// { dg-options "-Os -fno-tree-ccp -fno-tree-sra -fno-inline" }
+
+template <typename T, int N> struct A {
+  typedef T __attribute__((vector_size (N))) type;
+};
+template <typename T, int N> using B = typename A<T, N>::type;
+template <typename T> using C = B<T, 4>;
+struct D {
+  D (C<int> x) : d{x[3]} {}
+  D foo () { return d; }
+  C<int> d;
+};
+extern D d;
+struct { D bar () { return d; } } l;
+struct E { void baz () const; };
+
+void
+E::baz () const
+{
+  l.bar ().foo ();
+}