// RUN: %clang_cc1 %s -emit-llvm -debug-info-kind=limited -o /dev/null

typedef long unsigned int size_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long int uint64_t;
typedef uint16_t Elf64_Half;
typedef uint32_t Elf64_Word;
typedef uint64_t Elf64_Xword;
typedef uint64_t Elf64_Addr;
typedef uint64_t Elf64_Off;
typedef struct
{
  Elf64_Word p_type;
  Elf64_Off p_offset;
  Elf64_Addr p_vaddr;
  Elf64_Xword p_align;
}
Elf64_Phdr;
struct dl_phdr_info
{
  const char *dlpi_name;
  const Elf64_Phdr *dlpi_phdr;
  Elf64_Half dlpi_phnum;
  unsigned long long int dlpi_adds;
};
typedef unsigned _Unwind_Ptr;
struct object
{
  union
  {
    const struct dwarf_fde *single;
    struct dwarf_fde **array;
    struct fde_vector *sort;
  }
  u;
  union
  {
    struct
    {
    }
    b;
  }
  s;
  struct object *next;
};
typedef int sword;
typedef unsigned int uword;
struct dwarf_fde
{
  uword length;
  sword CIE_delta;
  unsigned char pc_begin[];
};
typedef struct dwarf_fde fde;
struct unw_eh_callback_data
{
  const fde *ret;
  struct frame_hdr_cache_element *link;
}
frame_hdr_cache[8];

_Unwind_Ptr
base_from_cb_data (struct unw_eh_callback_data *data)
{
}

void
_Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
{
  const unsigned char *p;
  const struct unw_eh_frame_hdr *hdr;
  struct object ob;
}
