// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=both,expected %s
// RUN: %clang_cc1                                         -verify=both,ref      %s

// ref-no-diagnostics

typedef __SIZE_TYPE__ size_t;

int a;
static_assert(__builtin_object_size(&a, 0) == sizeof(int), "");
float f;
static_assert(__builtin_object_size(&f, 0) == sizeof(float), "");
int arr[2];
static_assert(__builtin_object_size(&arr, 0) == (sizeof(int)*2), "");

float arrf[2];
static_assert(__builtin_object_size(&arrf, 0) == (sizeof(float)*2), "");
static_assert(__builtin_object_size(&arrf[1], 0) == sizeof(float), "");
static_assert(__builtin_object_size(&arrf[2], 0) == 0, "");



struct S {
  int a;
  char c;
};

S s;
static_assert(__builtin_object_size(&s, 0) == sizeof(s), "");

S ss[2];
static_assert(__builtin_object_size(&ss[1], 0) == sizeof(s), "");
static_assert(__builtin_object_size(&ss[1].c, 0) == sizeof(int), "");

struct A { char buf[16]; };
struct B : A {};
struct C { int i; B bs[1]; } c;
static_assert(__builtin_object_size(&c.bs[0], 3) == 16);
static_assert(__builtin_object_size(&c.bs[1], 3) == 0);

/// These are from test/SemaCXX/builtin-object-size-cxx14.
/// They all don't work since they are rejected when evaluating the first
/// parameter of the __builtin_object_size call.
///
/// GCC rejects them as well.
namespace InvalidBase {
  // Ensure this doesn't crash.
  struct S { const char *name; };
  S invalid_base(); // expected-note {{declared here}}
  constexpr size_t bos_name = __builtin_object_size(invalid_base().name, 1); // expected-error {{must be initialized by a constant expression}} \
                                                                             // expected-note {{non-constexpr function 'invalid_base'}}

  struct T { ~T(); };
  T invalid_base_2();
  constexpr size_t bos_dtor = __builtin_object_size(&(T&)(T&&)invalid_base_2(), 0); // expected-error {{must be initialized by a constant expression}} \
                                                                                    // expected-note {{non-literal type 'T'}}
}
