From 5c3af4220dfccfd4c381de575620a41966aa3e4f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 23 Aug 2021 16:14:47 +0200 Subject: Clear data in target::data() modifiers Currently we may end up resetting the data during the rule ambiguity detection. --- libbuild2/target.hxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libbuild2/target.hxx b/libbuild2/target.hxx index de17fa8..21b5dab 100644 --- a/libbuild2/target.hxx +++ b/libbuild2/target.hxx @@ -720,7 +720,8 @@ namespace build2 typename std::enable_if::value,T&>::type data (R&& d) const { - assert (sizeof (T) <= data_size && data_dtor == nullptr); + assert (sizeof (T) <= data_size); + clear_data (); return *new (&data_pad) T (forward (d)); } @@ -730,7 +731,8 @@ namespace build2 typename std::enable_if::value,T&>::type data (R&& d) const { - assert (sizeof (T) <= data_size && data_dtor == nullptr); + assert (sizeof (T) <= data_size); + clear_data (); T& r (*new (&data_pad) T (forward (d))); data_dtor = [] (void* p) {static_cast (p)->~T ();}; return r; -- cgit v1.1