diff options
author | Robert Hensing <robert@roberthensing.nl> | 2021-08-29 18:09:13 +0200 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2021-08-29 18:11:58 +0200 |
commit | f10465774fafaa2423cb05e02b38e03ed2abded7 (patch) | |
tree | ce3c4e35b59ac3ad24c44b65d50ddd041fe70fcf /src/libexpr/primops.cc | |
parent | af94b54db3a2be100731a215cb5e95f306471731 (diff) |
Force all Pos* to be non-null
This fixes a class of crashes and introduces ptr<T> to make the
code robust against this failure mode going forward.
Thanks regnat for the idea of a ref<T> without overhead!
Closes #4895
Closes #4893
Closes #5127
Closes #5113
Diffstat (limited to 'src/libexpr/primops.cc')
-rw-r--r-- | src/libexpr/primops.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index bfe41c9fa..2295e69a1 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -2109,7 +2109,7 @@ void prim_getAttr(EvalState & state, const Pos & pos, Value * * args, Value & v) pos ); // !!! add to stack trace? - if (state.countCalls && i->pos) state.attrSelects[*i->pos]++; + if (state.countCalls && *i->pos != noPos) state.attrSelects[*i->pos]++; state.forceValue(*i->value, pos); v = *i->value; } @@ -2369,7 +2369,7 @@ static void prim_functionArgs(EvalState & state, const Pos & pos, Value * * args for (auto & i : args[0]->lambda.fun->formals->formals) { // !!! should optimise booleans (allocate only once) Value * value = state.allocValue(); - v.attrs->push_back(Attr(i.name, value, &i.pos)); + v.attrs->push_back(Attr(i.name, value, ptr(&i.pos))); mkBool(*value, i.def); } v.attrs->sort(); |