// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s
// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s

// PR3023
void convert(void) {
  struct { typeof(0) f0; } v0;
}


// PR2784
struct OPAQUE; // CHECK-DAG: DW_TAG_structure_type, name: "OPAQUE"
typedef struct OPAQUE *PTR;
PTR p;


// PR2950
struct s0;
struct s0 { struct s0 *p; } g0;

struct s0 *f0(struct s0 *a0) {
  return a0->p;
}


// PR3134
char xpto[];


// PR3427
struct foo {
  int a;
  void *ptrs[];
};
struct foo bar;


// PR4143
struct foo2 {
  enum bar *bar;
};

struct foo2 foo2;


// Radar 7325611
// CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "barfoo"
typedef int barfoo;
barfoo foo() {
}

// CHECK-DAG: __uint128_t
__uint128_t foo128 ()
{
  __uint128_t int128 = 44;
  return int128;
}

// CHECK-DAG: uint64x2_t
typedef unsigned long long uint64_t;
typedef uint64_t uint64x2_t __attribute__((ext_vector_type(2)));
uint64x2_t extvectbar[4];

// CHECK-DAG: !DIBasicType(name: "long"
// CHECK-DAG: !DIBasicType(name: "unsigned long long"
void integral_types(long x, unsigned long long y) {
}
