aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/target.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2020-09-24 15:32:13 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2020-09-24 15:32:13 +0200
commit482d28f130511e7ce5f94dfcb03e020b4e1d9831 (patch)
tree0cdda07685ae5ce2f1b3ce1db98b3f4740db4181 /libbuild2/target.cxx
parentb6c61ea9afd2d738711770e44748e48be009154d (diff)
Fix target declaration upgrade logic
Diffstat (limited to 'libbuild2/target.cxx')
-rw-r--r--libbuild2/target.cxx12
1 files changed, 8 insertions, 4 deletions
diff --git a/libbuild2/target.cxx b/libbuild2/target.cxx
index 8d76f56..df03128 100644
--- a/libbuild2/target.cxx
+++ b/libbuild2/target.cxx
@@ -484,12 +484,16 @@ namespace build2
// Fall through (continue as if the first find() returned this target).
}
- if (decl > t->decl)
+ // Without resorting to something like atomic we can only upgrade the
+ // declaration to real (which is expected to only happen during the load
+ // phase).
+ //
+ if (decl == target_decl::real)
{
- // The decl value can only be adjusted during the load phase.
- //
assert (ctx.phase == run_phase::load);
- t->decl = decl;
+
+ if (t->decl != target_decl::real)
+ t->decl = decl;
}
return pair<target&, ulock> (*t, ulock ());