|  | ; This tests that unreachable basic blocks are pruned from the CFG, so that | 
|  | ; liveness analysis doesn't detect inconsistencies. | 
|  |  | 
|  | ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 \ | 
|  | ; RUN:      -allow-externally-defined-symbols | FileCheck %s | 
|  | ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \ | 
|  | ; RUN:      -allow-externally-defined-symbols | FileCheck %s | 
|  |  | 
|  | declare void @abort() | 
|  |  | 
|  | define internal i32 @unreachable_block() { | 
|  | entry: | 
|  | ; ret_val has no reaching uses and so its assignment may be | 
|  | ; dead-code eliminated. | 
|  | %ret_val = add i32 undef, undef | 
|  | call void @abort() | 
|  | unreachable | 
|  | label: | 
|  | ; ret_val has no reaching definitions, causing an inconsistency in | 
|  | ; liveness analysis. | 
|  | ret i32 %ret_val | 
|  | } | 
|  |  | 
|  | ; CHECK-LABEL: unreachable_block |