// RUN: %clang_cc1 -fsyntax-only -verify -DNONEON -std=c++11 -triple aarch64-arm-none-eabi %s

// A target without sve should not be able to use sve types.

void test_var() {
  __SVFloat32_t x; // expected-error {{SVE vector type '__SVFloat32_t' cannot be used in a target without sve}}
}

__attribute__((target("sve")))
void test_var_target() {
  __SVFloat32_t x;
}

__attribute__((target("sve2")))
void test_var_target2() {
  __SVFloat32_t x;
}

__attribute__((target("sve2-bitperm")))
void test_var_target3() {
  __SVFloat32_t x;
}

__SVFloat32_t other_ret();
__SVFloat32_t test_ret() { // expected-error {{SVE vector type '__SVFloat32_t' cannot be used in a target without sve}}
  return other_ret();
}

__attribute__((target("sve")))
__SVFloat32_t test_ret_target() {
  return other_ret();
}

void test_arg(__SVFloat32_t arg) { // expected-error {{SVE vector type '__SVFloat32_t' cannot be used in a target without sve}}
}

__attribute__((target("sve")))
void test_arg_target(__SVFloat32_t arg) {
}

__clang_svint32x4_t test4x() { // expected-error {{SVE vector type '__clang_svint32x4_t' cannot be used in a target without sve}}
  __clang_svint32x4_t x; // expected-error {{SVE vector type '__clang_svint32x4_t' cannot be used in a target without sve}}
  return x;
}

__attribute__((target("sve")))
__clang_svint32x4_t test4x_target() {
  __clang_svint32x4_t x;
  return x;
}

// Pointers are still valid to pass around.
void foo(__SVFloat32_t *&ptrA, __SVFloat32_t* &ptrB) {
    ptrA = ptrB;
}

__SVFloat32_t* foo(int x, __SVFloat32_t *ptrA) {
    return ptrA;
}

