xref: /llvm-project/clang/test/CodeGen/RISCV/riscv-vector-callingconv.cpp (revision 91896607ffb84561a7a2e466a00fdf1938c5bb63)
1*91896607SBrandon Wu // RUN: %clang_cc1 %s -triple riscv64 -target-feature +v -verify
2*91896607SBrandon Wu 
3*91896607SBrandon Wu __attribute__((riscv_vector_cc)) int var; // expected-warning {{'riscv_vector_cc' only applies to function types; type here is 'int'}}
4*91896607SBrandon Wu 
5*91896607SBrandon Wu __attribute__((riscv_vector_cc)) void func();
6*91896607SBrandon Wu __attribute__((riscv_vector_cc(1))) void func_invalid(); // expected-error {{'riscv_vector_cc' attribute takes no arguments}}
7*91896607SBrandon Wu 
8*91896607SBrandon Wu void test_no_attribute(int); // expected-note {{previous declaration is here}}
test_no_attribute(int x)9*91896607SBrandon Wu void __attribute__((riscv_vector_cc)) test_no_attribute(int x) { } // expected-error {{function declared 'riscv_vector_cc' here was previously declared without calling convention}}
10*91896607SBrandon Wu 
11*91896607SBrandon Wu class test_cc {
12*91896607SBrandon Wu   __attribute__((riscv_vector_cc)) void member_func();
13*91896607SBrandon Wu };
14*91896607SBrandon Wu 
test_lambda()15*91896607SBrandon Wu void test_lambda() {
16*91896607SBrandon Wu   __attribute__((riscv_vector_cc)) auto lambda = []() { // expected-warning {{'riscv_vector_cc' only applies to function types; type here is 'auto'}}
17*91896607SBrandon Wu   };
18*91896607SBrandon Wu }
19*91896607SBrandon Wu 
20*91896607SBrandon Wu [[riscv::vector_cc]] int var2; // expected-warning {{'vector_cc' only applies to function types; type here is 'int'}}
21*91896607SBrandon Wu 
22*91896607SBrandon Wu [[riscv::vector_cc]] void func2();
23*91896607SBrandon Wu [[riscv::vector_cc(1)]] void func_invalid2(); // expected-error {{'vector_cc' attribute takes no arguments}}
24*91896607SBrandon Wu 
25*91896607SBrandon Wu void test_no_attribute2(int); // expected-note {{previous declaration is here}}
test_no_attribute2(int x)26*91896607SBrandon Wu [[riscv::vector_cc]] void test_no_attribute2(int x) { } // expected-error {{function declared 'riscv_vector_cc' here was previously declared without calling convention}}
27*91896607SBrandon Wu 
28*91896607SBrandon Wu class test_cc2 {
29*91896607SBrandon Wu   [[riscv::vector_cc]] void member_func();
30*91896607SBrandon Wu };
31*91896607SBrandon Wu 
test_lambda2()32*91896607SBrandon Wu void test_lambda2() {
33*91896607SBrandon Wu   [[riscv::vector_cc]] auto lambda = []() { // expected-warning {{'vector_cc' only applies to function types; type here is 'auto'}}
34*91896607SBrandon Wu   };
35*91896607SBrandon Wu }
36