// REQUIRES: arm-registered-target
// RUN: %clang_cc1 -S -triple armv7-apple-darwin %s -emit-llvm -o - | FileCheck %s

typedef struct _zend_ini_entry zend_ini_entry;
struct _zend_ini_entry {
  void *mh_arg1;
};

char a;

const zend_ini_entry ini_entries[] = {
  {  ((char*)&((zend_ini_entry*)0)->mh_arg1 - (char*)(void*)0)},
};

// PR7564
struct GLGENH {
  int : 27;
  int EMHJAA : 1;
};

struct GLGENH ABHFBF = {1};

typedef __attribute__(( ext_vector_type(2) )) unsigned int uint2;
typedef __attribute__(( __vector_size__(8) )) unsigned int __neon_uint32x2_t;

// rdar://8183908
typedef unsigned int uint32_t;
typedef __attribute__((neon_vector_type(2)))  uint32_t uint32x2_t;
void foo() {
    const uint32x2_t signBit = { (uint2) 0x80000000 };
}

// CHECK: %struct.fp_struct_foo = type { void ([1 x i32])* }
struct fp_struct_bar { int a; };

struct fp_struct_foo {
  void (*FP)(struct fp_struct_bar);
} G;
