They might appear freestanding, not as part of an initializer. In that case, we need to create a temporary variable and return a pointer to it.
The test case added doesn't work yet since passing structs by value to functions is broken right now, I will fix that in a follow-up patch.