// RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage \
// RUN:            -fsafe-buffer-usage-suggestions \
// RUN:            -fdiagnostics-parseable-fixits \
// RUN:            -fsyntax-only %s 2>&1 | FileCheck %s

namespace std {
  class type_info;
  class bad_cast;
  class bad_typeid;
}
using size_t = __typeof(sizeof(int));
void *malloc(size_t);

void foo(...);
int bar(int *ptr);

void uneval_context_fix_pointer_dereference() {
  auto p = new int[10];
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"

  int tmp = p[5];
  typeid(foo(*p));
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:14-[[@LINE-1]]:15}:""
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:16-[[@LINE-2]]:16}:"[0]"
  _Generic(*p, int: 2, float: 3);
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:12-[[@LINE-1]]:13}:""
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:14-[[@LINE-2]]:14}:"[0]"
}

void uneval_context_fix_pointer_array_access() {
  auto p = new int[10];
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"

  int tmp = p[5];
  typeid(foo(p[5]));
  _Generic(p[2], int: 2, float: 3);
}

void uneval_context_fix_pointer_reference() {
  auto p = new int[10];
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:11}:"std::span<int> p"
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-2]]:12-[[@LINE-2]]:12}:"{"
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:23}:", 10}"

  int tmp = p[5];
  typeid(bar(p));
  // CHECK-DAG: fix-it:"{{.*}}":{[[@LINE-1]]:15-[[@LINE-1]]:15}:".data()"
}

// The FixableGagdtes are not working in the following scenarios:
// 1. sizeof(DRE)
// 2. typeid(DRE)
// 3. __typeof(DRE)
// 4. _Generic(expr, type_1: DRE, type_2:)
// 5. decltype(DRE) var = y;
// 6. noexcept(DRE);
// This is becauste the UPC and ULC context matchers do not handle these contexts
// and almost all FixableGagdets currently depend on these matchers.

// FIXME: Emit fixits for each of the below use.
void uneval_context_fix_pointer_dereference_not_handled() {
  auto p = new int[10];
  int tmp = p[5];

  foo(sizeof(*p), sizeof(decltype(*p)));
  __typeof(*p) x;
  int *q = (int *)malloc(sizeof(*p));
  int y = sizeof(*p);
  __is_pod(__typeof(*p));
  __is_trivially_constructible(__typeof(*p), decltype(*p));
  _Generic(*p, int: 2, float: 3);
  _Generic(1, int: *p, float: 3);
  _Generic(1, int: 2, float: *p);
  decltype(*p) var = y;
  noexcept(*p);
  typeid(*p);
}

