AstSemantics.md does not describe grow_memory as trapping. However, GrowMemory traps in two cases and there is a test for this. I think the trap and test predate grow_memory returning -1 on error and, now that it does, it'd be better to always return -1 instead of trapping. That way the caller doesn't have to check for two separate error conditions.