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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #61540|0                           |1
        is obsolete|                            |

--- Comment #20 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 61546
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61546&action=edit
gcc16-pr117785-wip.patch

Further progress.

My current problem is with std::nested_exception (but guess arbitrary code
which uses std::current_exception () or perhaps std::uncaught_exceptions ()).
In the testcase I have (simplified):
        try
          {
            throw 42;
          }
        catch (...)
          {
            std::nested_exception c;
            if (c.nested_ptr () == nullptr)
              return -1;
          }
and -1 is the return value I'm getting but don't expect.
The problem is that when parsing the c declaration, we try to constant evaluate
the constructor just in case it can be constructed without a call, and there
current_exception () returns { nullptr } because it isn't evaluated with an
active exception at that point.

Shall the two functions just give up when not manifestly constant-evaluated? 
Or non-strict?

Reply via email to