how to identify basic blocks added for switch instruction without default?


    I just notice that front-end will add an extra block for switch instruction without default. How could I identify basic blocks added due to this reason?

    The added codes looks like:

sw.default.i625: ; preds = %if.end512
   tail call void @fancy_abort(i8* getelementptr inbounds ([38 x i8]* @.str, i64 0, i64 0), i32 3045, i8* getelementptr inbounds ([23 x i8]* @__FUNCTION__.compcode_to_comparison, i64 0, i64 0)) #7, !dbg !8046
   unreachable, !dbg !8046

    Could I get "unreachable" information from metadata?

    Thanks a lot!



I suspect pattern matching “sw.default” will identify these blocks with a reasonable accuracy. The code in clang adding these blocks is in lib/CodeGen/CGStmt.cpp.


Thanks a lot for the suggestion! Let me try the pattern matching firstly.