// RUN: %clang_cc1 -no-opaque-pointers -S -emit-llvm -o - -O2 -disable-llvm-passes %s      | FileCheck %s --implicit-check-not="call void @llvm.lifetime" --check-prefixes=CHECK,O2
// RUN: %clang_cc1 -no-opaque-pointers -S -emit-llvm -o - -O2 -disable-lifetime-markers %s | FileCheck %s --implicit-check-not="call void @llvm.lifetime" --check-prefixes=CHECK
// RUN: %clang_cc1 -no-opaque-pointers -S -emit-llvm -o - -O0 %s                           | FileCheck %s --implicit-check-not="call void @llvm.lifetime" --check-prefixes=CHECK 

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

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

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

// CHECK-LABEL: @goto_bypass
void goto_bypass(void) {
  {
    char x;
  l1:
    bar(&x, 1);
  }
  goto l1;
}

// CHECK-LABEL: @no_switch_bypass
void no_switch_bypass(int n) {
  switch (n) {
  case 1: {
    // O2: call void @llvm.lifetime.start.p0i8(i64 1,
    // O2: call void @llvm.lifetime.end.p0i8(i64 1,
    char x;
    bar(&x, 1);
    break;
  }
  case 2:
    n = n;
    // O2: call void @llvm.lifetime.start.p0i8(i64 5,
    // O2: call void @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;
    char x;
    bar(&x, 1);
    break;
  case 2:
    bar(&x, 1);
    break;
  }
}

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

extern void foo2(int p);

// O2-LABEL: @jump_backward_over_declaration(
int jump_backward_over_declaration(int a) {
  int *p = 0;
// O2: call void @llvm.lifetime.start.p0i8(
label1:
  if (p) {
    foo2(*p);
    return 0;
  }

  int i = 999;
  if (a != 2) {
    p = &i;
    goto label1;
  }
  return -1;
// O2: call void @llvm.lifetime.end.p0i8(
}
