In a sense this is making the sync code less useful, because someone could be legitimately sending a message with an empty container (just as we tend to attach special meaning to a nullptr) ... but more likely an empty container is a performance bug; he says it was in his cases.
Also, we can't support sending empty containers as messages in the round-robin backend, so if we want to be able to swap that in we need the same restrictions elsewhere.
We do fear that some code will only generate empty sends at high processor counts, making assertion failures here tricky to debug, but since an assertion will never bring down an opt-mode simulation, that should be reasonable enough.
Logan got bit by this in the ray tracing code.
In a sense this is making the sync code less useful, because someone could be legitimately sending a message with an empty container (just as we tend to attach special meaning to a nullptr) ... but more likely an empty container is a performance bug; he says it was in his cases.
Also, we can't support sending empty containers as messages in the round-robin backend, so if we want to be able to swap that in we need the same restrictions elsewhere.
We do fear that some code will only generate empty sends at high processor counts, making assertion failures here tricky to debug, but since an assertion will never bring down an opt-mode simulation, that should be reasonable enough.