On 11/28/23 12:52, Jakub Jelinek wrote:
On Tue, Nov 28, 2023 at 11:31:48AM -0500, Jason Merrill wrote:
+             if (len)
+               {
+                 if (data)
+                   msg = c_getstr (data);
+                 if (msg == NULL)
+                   buf = XNEWVEC (char, len);

Jonathan pointed out elsewhere that this gets leaked if error return
prevents us from getting to the XDELETEVEC.

Seems it is just one of the returns, so ok to just XDELETEVEC there,
or should I add some RAII for that?  The other error return after
this point is for !len case and so buf isn't allocated.

RAII is generally preferable, but this is sufficient.

2023-11-28  Jakub Jelinek  <ja...@redhat.com>

        * semantics.cc (finish_static_assert): Free buf on error return.

--- gcc/cp/semantics.cc.jj      2023-11-25 10:28:27.778191561 +0100
+++ gcc/cp/semantics.cc 2023-11-28 18:50:00.094733919 +0100
@@ -11582,6 +11582,7 @@ finish_static_assert (tree condition, tr
                          error_at (location,
                                    "%<static_assert%> message %<data()[%d]%> "
                                    "must be a constant expression", i);
+                         XDELETEVEC (buf);
                          return;
                        }
                      if (msg == NULL)


        Jakub


Reply via email to