https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120473

            Bug ID: 120473
           Summary: Pointers caught with pointer &var handler not
                    modificable
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

const char r[] = "hello";
const char *s[] = { &r[0], &r[3] };
const char **p = &s[0];

int
foo ()
{
  try
    {
      throw p;
    }
  catch (const char **&x)
    {
      if (x != &s[0])
        return 1;
      ++x;
      if (x != &s[1])
        return 2;
      try
        {
          throw;
        }
      catch (const char **&y)
        {
          if (y != &s[1])
            return 3;
        }
    }
  return 0;
}

extern "C" int printf (const char *, ...);

int
main ()
{
  printf ("%d\n", foo ());
}

prints 3 with gcc++ and 0 with clang++ and MSVC.
I would have thought that https://eel.is/c++draft/except#handle-16 would say
here that the changes should be done to the exception object.  Is this related
to CWG388?  Though in this case it is the same type case, i.e.
https://eel.is/c++draft/except#handle-3.1
rather than https://eel.is/c++draft/except#handle-3.3 or
https://eel.is/c++draft/except#handle-3.4

Reply via email to