Incorrect envoyproxy listener merging

Since there is no official dual-stack support in 1.15 yet, decided to ask a question here, starting an issue will not be entirely correct.
Istio version: 1.15.0

We needed dual-stack before version 1.7, so we decided to create gateways with two servers, one with “bind: ‘::’”, and the second with “bind:”, which is not recommended by the documentation.
Despite our dirty hacks, everything worked correctly until we decided to add a gateway with a grpc port.
After that we encoured error message from envoyproxy:

{"level":"warning","time":"2023-05-19T13:32:33.058990Z","scope":"envoy config","msg":"gRPC config for rejected: Error adding/updating listener(s) error adding listener '': filter chain '' has the same matching rules defined as ''\n"}

After a deep research, we found that if you use one bind everywhere ( or ::), then everything works correctly.
When we enabled debug logs in istiod, we saw that merged gateways seem to be wrong, when ipv4 and ipv6 bind are used together.
If we only use ipv4 binding, the ServerPorts look like [{80 HTTP}], which means the http and grpc gateways have been merged into one, because envoyproxy can detect different types of traffic on the same port for some protocols. I assume, this will generate a single envoyproxy listener.
But if we use ipv4 and ipv6 together, then ServerPorts look like [{80 HTTP} {80 HTTP ::} {80 GRPC ::}] or [{80 HTTP} {80 HTTP ::} {80 GRPC}] depending on previous created gateways (ipv4/ipv6/both binds).

Despite the fact that this version does not support dual-stack, I decided to ask a question instead of issue, this may be an incorrect use of the gateway configuration on our part also.