A case of a "programmer" not counting from zero?
The range is #0..#255 which is 256, so if you add/concat something to #255 you have a range error or an overflow.
If you want to avoid that, use AnsiString, not shortstring.
As Bart wrote, this is absolutely not a bug from the compiler side, it is frankly programmer error.
The most important thing is that after an overflow the compiler's behavior is undefined, hence it can be either rubbish, 0, or 255. Since it is undefined you can not rely on such things. As Bart also wrote, you should use overflow checking, at least during debugging. Wrong code is wrong code....