// RUN: %clang_cc1 -S -emit-llvm -o - -O2 -disable-llvm-passes %s | FileCheck %s -check-prefixes=CHECK,O2
// RUN: %clang_cc1 -S -emit-llvm -o - -O2 -disable-lifetime-markers %s \
// RUN:       | FileCheck %s -check-prefixes=CHECK,O0
// RUN: %clang_cc1 -S -emit-llvm -o - -O0 %s | FileCheck %s -check-prefixes=CHECK,O0

extern int bar(char *A, int n);

// CHECK-LABEL: @foo
// O0-NOT: @llvm.lifetime.start
int foo (int n) {
  if (n) {
// O2: @llvm.lifetime.start
    char A[100];
    return bar(A, 1);
  } else {
// O2: @llvm.lifetime.start
    char A[100];
    return bar(A, 2);
  }
}

// CHECK-LABEL: @no_goto_bypass
void no_goto_bypass() {
  // O2: @llvm.lifetime.start.p0i8(i64 1
  char x;
l1:
  bar(&x, 1);
  char y[5];
  bar(y, 5);
  goto l1;
  // Infinite loop
  // O2-NOT: @llvm.lifetime.end.p0i8(
}

// CHECK-LABEL: @goto_bypass
void goto_bypass() {
  {
    // O2-NOT: @llvm.lifetime.start.p0i8(i64 1
    // O2-NOT: @llvm.lifetime.end.p0i8(i64 1
    char x;
  l1:
    bar(&x, 1);
  }
  goto l1;
}

// CHECK-LABEL: @no_switch_bypass
void no_switch_bypass(int n) {
  switch (n) {
  case 1: {
    // O2: @llvm.lifetime.start.p0i8(i64 1
    // O2: @llvm.lifetime.end.p0i8(i64 1
    char x;
    bar(&x, 1);
    break;
  }
  case 2:
    n = n;
    // O2: @llvm.lifetime.start.p0i8(i64 5
    // O2: @llvm.lifetime.end.p0i8(i64 5
    char y[5];
    bar(y, 5);
    break;
  }
}

// CHECK-LABEL: @switch_bypass
void switch_bypass(int n) {
  switch (n) {
  case 1:
    n = n;
    // O2-NOT: @llvm.lifetime.start.p0i8(i64 1
    // O2-NOT: @llvm.lifetime.end.p0i8(i64 1
    char x;
    bar(&x, 1);
    break;
  case 2:
    bar(&x, 1);
    break;
  }
}

// CHECK-LABEL: @indirect_jump
void indirect_jump(int n) {
  char x;
  // O2-NOT: @llvm.lifetime
  void *T[] = {&&L};
  goto *T[n];
L:
  bar(&x, 1);
}

// O2-LABEL: @jump_backward_over_declaration(
// O2: %[[p:.*]] = alloca i32*
// O2: %[[v0:.*]] = bitcast i32** %[[p]] to i8*
// O2: call void @llvm.lifetime.start.p0i8(i64 {{.*}}, i8* %[[v0]])
// O2-NOT: call void @llvm.lifetime.start.p0i8(

extern void foo2(int p);

int jump_backward_over_declaration(int a) {
  int *p = 0;
label1:
  if (p) {
    foo2(*p);
    return 0;
  }

  int i = 999;
  if (a != 2) {
    p = &i;
    goto label1;
  }
  return -1;
}
