Xcode 16's clang generates incorrect inlined optimized code

I'm encountering a bug with Xcode 16's clang's code generation. It seems to be generating incorrect optimized code (-O2 setting) when functions are inlined and then optimized. This is a behavior that didn't exist in Xcode 15, and also doesn't happen in open source clang (I tested open source clang 17/18/19 on my M1 Max MacBook Pro).

The entire code snippet is slightly too long to post here so I'm including a link to the godbolt compiler explorer instead: https://godbolt.org/z/KhG3x7E1d . This piece of code attempts to find a sequence of illegal UTF-8 characters and report the index of the character in a string.

Not that in godbolt, the program works fine and finishes correctly. When I test it in Xcode 16 though (with -O2), it doesn't, and utf_find_illegal returns 4 instead of 3, which is incorrect. Digging through the disassembly it seems to be doing some complicated optimizations by inlining both utf_ptr2len and utf_ptr2char together but it doesn't perform correctly and jumped to the wrong place when the illegal character was found.

I did try to see if there are some undefined behaviors or something which caused the optimizer to go to town with the code. Funnily when I use UBSAN (by compiling the code with -O2 -fsanitize=undefined) the code works just fine and the bug doesn't happen.

Wonder if other people have seen similar issues? Code generation bugs seem really dangerous considering that people rely on the compiler to… work. I tried to scrub the code to see if there are anything that could suggest the compiler to behave incorrectly but not having any luck as well.

I have also tested Xcode 16.1 beta and it doesn't seem to help.

Note: Yes, I know I'm supposed to use the Feedback Assistant but I have never received any responses on it even when filing legit bugs and their statuses are still open, with their bugs unfixed. Pardon me for not trusting it too much.

Answered by y-c-c in 817897022

For future historical reference, Xcode 16.2 has fixed this bug. It's kind of annoying as the official release notes make no mention of fixing this bug but it is indeed fixed.

It sounds you’ve driven this to the point where it’s worth having a compiler engineer take a look. I recommend that you file a bug report about this. See my Bug Reporting: How and Why? post for general advice on this topic. In this particular case, I recommend that you include test code and your analysis of where you see things go wrong.

Please post your bug number, just for the record.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Thanks for the response. I ended up filing a bug anyway (FB15489959).

Accepted Answer

For future historical reference, Xcode 16.2 has fixed this bug. It's kind of annoying as the official release notes make no mention of fixing this bug but it is indeed fixed.

Xcode 16's clang generates incorrect inlined optimized code
 
 
Q