diff options
| author | Vladimir Stefanovic <vladimir.stefanovic@rt-rk.com> | 2018-08-30 17:31:38 +0000 |
|---|---|---|
| committer | Vladimir Stefanovic <vladimir.stefanovic@rt-rk.com> | 2018-08-30 17:31:38 +0000 |
| commit | 7e58ebf6b85f8ea737b281a0552bcbb4ea3b04fb (patch) | |
| tree | b32d272a9766872803c14c1883de5f71448b11fa /llvm/test | |
| parent | 748297341171927b0693e4ac78fa0a223df5ea3c (diff) | |
| download | bcm5719-llvm-7e58ebf6b85f8ea737b281a0552bcbb4ea3b04fb.tar.gz bcm5719-llvm-7e58ebf6b85f8ea737b281a0552bcbb4ea3b04fb.zip | |
Allow inconsistent offsets for 'noreturn' basic blocks when '-verify-cfiinstrs'
With r295105, some 'noreturn' blocks (those that don't return and have no
successors) may be merged.
If such blocks' predecessors have different outgoing offset or register, don't
report an error in CFIInstrInserter verify().
Thanks to Vlad Tsyrklevich for reporting the issue.
Differential Revision: https://reviews.llvm.org/D51161
llvm-svn: 341087
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/cfi-inserter-noreturnblock.mir | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/cfi-inserter-noreturnblock.mir b/llvm/test/CodeGen/X86/cfi-inserter-noreturnblock.mir new file mode 100644 index 00000000000..809cd377e76 --- /dev/null +++ b/llvm/test/CodeGen/X86/cfi-inserter-noreturnblock.mir @@ -0,0 +1,30 @@ +# RUN: llc -o - %s -mtriple=x86_64-- -verify-cfiinstrs \ +# RUN: -run-pass=cfi-instr-inserter + +# Test that CFI verifier does not report inconsistent offset for the +# 'noreturn' block. +--- +name: testNoreturnBlock +body: | + bb.0: + CFI_INSTRUCTION def_cfa_offset 24 + JNE_1 %bb.2, implicit undef $eflags + + bb.1: + CFI_INSTRUCTION def_cfa_offset 32 + + bb.2: + TRAP +... + +# C code to reproduce the issue, built with +# '-O2 -mllvm -tail-merge-size=1 -mllvm -verify-cfiinstrs': +# +# void foo1(int v) __attribute__((noreturn)) { +# if (v == 1) { +# __builtin_trap(); +# } +# if (foo2(v)) { +# __builtin_trap(); +# } +# } |

