> I don't know about "real" real code in the wild that broke, but it's easy
> to imagine something like this toy example breaking:
That is why I asked for real code. Lua is a dynamic language. If
we consider toy examples, any single change to the language breaks
something. For instance, the code «assert(math.tointeger == nil)»
broke from 5.2 to 5.3. Similarly, «assert(load("return 10//1") == nil)»
also broke from 5.2 to 5.3.
In your examples, the code is arguably broken to begin with in the sense of pre-5.3 code (it would never be written pre-5.3, and can make sense now only as a feature check to determine what version of Lua you're running on).
On the other hand, my examples do make sense to write in application code pre-5.4, and they exhibit well-defined, useful behavior on 5.3. That well-defined behavior changed in 5.4, hence it is an incompatibility.