https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101559
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- You can make the compiler believe it could use computed goto to that label but actually not do that, say by void *volatile ptr = &&label; int volatile cond = 0; if (cond) goto *ptr; But even this would just have an edge from that computed goto and because of volatile it wouldn't know if the condition is never true. Or gcc supports asm goto, where the inline asm would do that csr_read_write part (before GCC 11 asm goto couldn't have output operands) and that would make the compiler take branching from the inline asm to the label as possibility.