Kyle Cripps
Kyle Cripps
superseded by https://github.com/p4lang/p4c/pull/4353
This was also introduced by e60cb8a633e305a75cb28c56dbd3d1dbccc871c8. :)
Actions inlining transforms `foo()` to something like this: ``` @name("foo") action foo_0() { { @name("x") bit x_0; @name("y") bit y_0; if (true) { if (false) { __e(x_0); } } else...
> I was able to fix this with the following change to `SubstituteParameters::postorder(IR::PathExpression *expr)`: I am not sure if it would better to perform the cloning here or in `ActionsInliner::preorder(IR::MethodCallStatement...
Here is another case, which hits the same `Compiler bug`, but is not fixed by my change described above: ``` extern void __e(in bit arg); extern void __e2(in bit arg);...
> or by inserting a pass that converts DAGs into trees before the def-use analysis. This is starting to sound like the best solution..
Introduced by e60cb8a633e305a75cb28c56dbd3d1dbccc871c8.
I'm not sure if this is the best fix, but changing `expressionWrites()` in `def_use.h` to the following seems to work for our backend: ``` void expressionWrites(const IR::Expression *expression, const LocationSet...
@mihaibudiu Makes sense, thank you for the explanation.
Unfortunately, https://github.com/p4lang/p4c/pull/4539 does not fix this, so it doesn't seem to be a duplicate of #4500.