## This reproduces issue 26 from our github repo
##  BOLT fails with the following assertion:
##    llvm/tools/llvm-bolt/src/BinaryFunction.cpp:2950: void llvm::bolt::BinaryFunction::postProcessBranches(): Assertion `validateCFG() && "invalid CFG"' failed.

# REQUIRES: system-linux

# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \
# RUN:   %s -o %t.o
# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q
# RUN: llvm-bolt %t.exe --relocs --print-cfg -o %t.out 2>&1 \
# RUN:    | FileCheck %s

# CHECK-NOT: BOLT-WARNING: CFG invalid in XYZ @ .LBB0

# CHECK: Binary Function "XYZ"

# CHECK: .Ltmp{{.*}} (1 instructions, align : 1)
# CHECK-NEXT: Secondary Entry Point: FUNCat{{.*}}

  .text
  .globl XYZ
  .type XYZ, %function
  .size XYZ, .Lend1-XYZ
XYZ:
  movl %fs:-0x350, %eax
  cmpl %eax, %edi
  jne .L1

  cmp %rdx, (%rsi)
  jne .L2

  movq %rcx, (%rsi)
.L1:
  retq

.L2:
  movl $0xffffffff, %eax
  retq
.Lend1:

  .globl FUNC
  .type FUNC, %function
  .size FUNC, .Lend - FUNC
FUNC:
  cmpq %rdi, %rsi
  je .L1
  retq
.Lend:

  .globl main
  .type main, %function
  .size main, .Lend2 - main
main:
  xorq %rax, %rax
  retq

# For relocations against .text
  call exit
.Lend2:
