// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme -Waarch64-sme-attributes -fsyntax-only -verify %s // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme -Waarch64-sme-attributes -fsyntax-only -verify=expected-cpp -x c++ %s __attribute__((target_clones("sve", "simd"))) void ok_arm_streaming(void) __arm_streaming {} __arm_locally_streaming __attribute__((target_version("sme2"))) void ok_arm_streaming(void) __arm_streaming {} __attribute__((target_version("default"))) void ok_arm_streaming(void) __arm_streaming {} __attribute__((target_clones("sve", "simd"))) void ok_arm_streaming_compatible(void) __arm_streaming_compatible {} __arm_locally_streaming __attribute__((target_version("sme2"))) void ok_arm_streaming_compatible(void) __arm_streaming_compatible {} __attribute__((target_version("default"))) void ok_arm_streaming_compatible(void) __arm_streaming_compatible {} __arm_locally_streaming __attribute__((target_clones("sve", "simd"))) void ok_no_streaming(void) {} __attribute__((target_version("sme2"))) void ok_no_streaming(void) {} __attribute__((target_version("default"))) void ok_no_streaming(void) {} __attribute__((target_clones("sve", "simd"))) void bad_mixed_streaming(void) {} // expected-cpp-error@+2 {{multiversioned function declaration has a different calling convention}} // expected-error@+1 {{multiversioned function declaration has a different calling convention}} __attribute__((target_version("sme2"))) void bad_mixed_streaming(void) __arm_streaming {} // expected-cpp-error@+2 {{multiversioned function declaration has a different calling convention}} // expected-error@+1 {{multiversioned function declaration has a different calling convention}} __attribute__((target_version("default"))) void bad_mixed_streaming(void) __arm_streaming_compatible {} // expected-cpp-error@+2 {{multiversioned function declaration has a different calling convention}} // expected-error@+1 {{multiversioned function declaration has a different calling convention}} __arm_locally_streaming __attribute__((target_version("dotprod"))) void bad_mixed_streaming(void) __arm_streaming {} void n_caller(void) { ok_arm_streaming(); ok_arm_streaming_compatible(); ok_no_streaming(); bad_mixed_streaming(); } void s_caller(void) __arm_streaming { ok_arm_streaming(); ok_arm_streaming_compatible(); ok_no_streaming(); bad_mixed_streaming(); } void sc_caller(void) __arm_streaming_compatible { ok_arm_streaming(); ok_arm_streaming_compatible(); ok_no_streaming(); bad_mixed_streaming(); }