xref: /llvm-project/clang/test/SemaCXX/attr-riscv-rvv-vector-bits.cpp (revision 42e79d9771f96110c7f51ee5f39a76517ae44234)
1 // RUN: %clang_cc1 -triple riscv64-none-linux-gnu -target-feature +zve64x -ffreestanding -fsyntax-only -verify -std=c++11 -mvscale-min=4 -mvscale-max=4 -Wconversion %s
2 // expected-no-diagnostics
3 
4 #include <stdint.h>
5 
6 typedef __rvv_int8m1_t vint8m1_t;
7 typedef vint8m1_t fixed_int8m1_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen)));
8 typedef int8_t gnu_int8m1_t __attribute__((vector_size(__riscv_v_fixed_vlen / 8)));
9 
10 template<typename T> struct S { T var; };
11 
12 S<fixed_int8m1_t> s;
13 
14 // Test implicit casts between VLA and VLS vectors
to_vint8m1_t(fixed_int8m1_t x)15 vint8m1_t to_vint8m1_t(fixed_int8m1_t x) { return x; }
from_vint8m1_t(vint8m1_t x)16 fixed_int8m1_t from_vint8m1_t(vint8m1_t x) { return x; }
17 
18 // Test implicit casts between GNU and VLA vectors
to_vint8m1_t__from_gnu_int8m1_t(gnu_int8m1_t x)19 vint8m1_t to_vint8m1_t__from_gnu_int8m1_t(gnu_int8m1_t x) { return x; }
from_vint8m1_t__to_gnu_int8m1_t(vint8m1_t x)20 gnu_int8m1_t from_vint8m1_t__to_gnu_int8m1_t(vint8m1_t x) { return x; }
21 
22 // Test implicit casts between GNU and VLS vectors
to_fixed_int8m1_t__from_gnu_int8m1_t(gnu_int8m1_t x)23 fixed_int8m1_t to_fixed_int8m1_t__from_gnu_int8m1_t(gnu_int8m1_t x) { return x; }
from_fixed_int8m1_t__to_gnu_int8m1_t(fixed_int8m1_t x)24 gnu_int8m1_t from_fixed_int8m1_t__to_gnu_int8m1_t(fixed_int8m1_t x) { return x; }
25