]> gcc.gnu.org Git - gcc.git/commit
eh: ICE with std::initializer_list and ASan [PR115865]
authorMarek Polacek <polacek@redhat.com>
Thu, 11 Jul 2024 19:57:43 +0000 (15:57 -0400)
committerMarek Polacek <polacek@redhat.com>
Thu, 18 Jul 2024 14:39:25 +0000 (10:39 -0400)
commit1e60a6abfece40c7bf55d6ca0a439078d3f5159a
tree94dc6edcfcd2c461825b16bbdfa810d96313b496
parent5080840d8fbf25a321dd27543a1462d393d338bc
eh: ICE with std::initializer_list and ASan [PR115865]

Here we ICE with -fsanitize=address on

  std::initializer_list x = { 1, 2, 3 };

since r14-8681, which removed .ASAN_MARK calls on TREE_STATIC variables.
That means that lower_try_finally now instead of

  try
    {
      .ASAN_MARK (UNPOISON, &C.0, 12);
      x = {};
      x._M_len = 3;
      x._M_array = &C.0;
    }
  finally
    {
      .ASAN_MARK (POISON, &C.0, 12);
    }

gets:

  try
    {
      x = {};
      x._M_len = 3;
      x._M_array = &C.0;
    }
  finally
    {

    }

and we ICE on the empty finally in lower_try_finally_onedest while
getting get_eh_else.

PR c++/115865

gcc/ChangeLog:

* tree-eh.cc (get_eh_else): Check that the result of
gimple_seq_first_stmt is non-null.

gcc/testsuite/ChangeLog:

* g++.dg/asan/initlist2.C: New test.

Co-authored-by: Jakub Jelinek <jakub@redhat.com>
gcc/testsuite/g++.dg/asan/initlist2.C [new file with mode: 0644]
gcc/tree-eh.cc
This page took 0.06026 seconds and 5 git commands to generate.