From eacf7f7ccd40a56d1fe761d3d30ced6c6acd58da Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 1 Nov 2018 13:00:16 +0200 Subject: Add support for rule-specific variables, use to fix cc.type data race --- build2/target.cxx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'build2/target.cxx') diff --git a/build2/target.cxx b/build2/target.cxx index 5d11337..20b9fd6 100644 --- a/build2/target.cxx +++ b/build2/target.cxx @@ -192,6 +192,31 @@ namespace build2 return r; } + pair target::opstate:: + find_original (const variable& var, bool target_only) const + { + pair r (lookup (), 0); + + ++r.second; + { + auto p (vars.find (var)); + if (p.first != nullptr) + r.first = lookup (*p.first, p.second, vars); + } + + // Delegate to target's find_original(). + // + if (!r.first) + { + auto p (target_->find_original (var, target_only)); + + r.first = move (p.first); + r.second = r.first ? r.second + p.second : p.second; + } + + return r; + } + optional target:: split_name (string& v, const location& loc) { @@ -366,6 +391,8 @@ namespace build2 { t->ext_ = &i->first.ext; t->implied = implied; + t->state.data[0].target_ = t; + t->state.data[1].target_ = t; return pair (*t, move (ul)); } -- cgit v1.1