From bcb5045dff9e87decbad3a785eb1fe42f4fc1410 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 3 Mar 2017 10:05:16 +0200 Subject: Use final action state after match at top level (operation) --- build2/operation.cxx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'build2/operation.cxx') diff --git a/build2/operation.cxx b/build2/operation.cxx index 1fe70df..ff2051d 100644 --- a/build2/operation.cxx +++ b/build2/operation.cxx @@ -126,9 +126,20 @@ namespace build2 { const target& t (*static_cast (ts[j])); - target_state s (j < i - ? match (a, t, false) - : target_state::postponed); + // Finish matching targets that we have started. Note that we use the + // state for the "final" action that will be executed and not our + // action. Failed that, we may fail to find a match for a "stronger" + // action but will still get unchanged for the original one. + // + target_state s; + if (j < i) + { + match (a, t, false); + s = t.serial_state (false); + } + else + s = target_state::postponed; + switch (s) { case target_state::postponed: -- cgit v1.1