aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/target.cxx
diff options
context:
space:
mode:
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 ());