// RUN: %clang_cc1 %s -emit-llvm -w -triple x86_64-apple-darwin10 -fsanitize=array-bounds -o - | FileCheck %s

// CHECK-LABEL: define{{.*}} i32 @foo(
int foo(int *const p __attribute__((pass_object_size(0))), int n) {
  int x = (p)[n];

  // CHECK: [[SIZE_ALLOCA:%.*]] = alloca i64, align 8
  // CHECK: store i64 %{{.*}}, ptr [[SIZE_ALLOCA]], align 8
  // CHECK: [[LOAD_SIZE:%.*]] = load i64, ptr [[SIZE_ALLOCA]], align 8, !nosanitize
  // CHECK-NEXT: [[SCALED_SIZE:%.*]] = udiv i64 [[LOAD_SIZE]], 4, !nosanitize
  // CHECK-NEXT: [[SEXT_N:%.*]] = sext i32 %{{.*}} to i64, !nosanitize
  // CHECK-NEXT: [[ICMP:%.*]] = icmp ult i64 [[SEXT_N]], [[SCALED_SIZE]], !nosanitize
  // CHECK-NEXT: br i1 [[ICMP]], {{.*}} !nosanitize
  // CHECK: __ubsan_handle_out_of_bounds

  {
    int **q = &p;
    int **p = q; // Shadow the parameter. The pass_object_size info is lost.
    // CHECK-NOT: __ubsan_handle_out_of_bounds
    x = *p[n];
  }

  // CHECK: ret i32
  return x;
}

typedef struct {} ZeroSizedType;

// CHECK-LABEL: define{{.*}} void @bar(
ZeroSizedType bar(ZeroSizedType *const p __attribute__((pass_object_size(0))), int n) {
  // CHECK-NOT: __ubsan_handle_out_of_bounds
  // CHECK: ret void
  return p[n];
}

// CHECK-LABEL: define{{.*}} i32 @baz(
int baz(int *const p __attribute__((pass_object_size(1))), int n) {
  // CHECK: __ubsan_handle_out_of_bounds
  // CHECK: ret i32
  return p[n];
}

// CHECK-LABEL: define{{.*}} i32 @mat(
int mat(int *const p __attribute__((pass_object_size(2))), int n) {
  // CHECK-NOT: __ubsan_handle_out_of_bounds
  // CHECK: ret i32
  return p[n];
}

// CHECK-LABEL: define{{.*}} i32 @pat(
int pat(int *const p __attribute__((pass_object_size(3))), int n) {
  // CHECK-NOT: __ubsan_handle_out_of_bounds
  // CHECK: ret i32
  return p[n];
}

// CHECK-LABEL: define{{.*}} i32 @cat(
int cat(int p[static 10], int n) {
  // CHECK-NOT: __ubsan_handle_out_of_bounds
  // CHECK: ret i32
  return p[n];
}

// CHECK-LABEL: define{{.*}} i32 @bat(
int bat(int n, int p[n]) {
  // CHECK-NOT: __ubsan_handle_out_of_bounds
  // CHECK: ret i32
  return p[n];
}
