I don't know why LLVM/clang on macOS requires a local label for conditional branches.
I believe the issue is the other way around - it does require a local label for conditional branches everywhere. It's just that the definition of what is a local label is platform dependent.
On macOS/MachO, extern C symbols are all prefixed with an underscore. Local labels are symbols that don't start with an underscore, but starts with a capital `L`. This is contrary to ELF where local labels are identifiers that start with a period `.`.
I guess the proper way to handle this is to wrap this up in a macro or function, like how many other similar details are handled elsewhere.