@@ -639,3 +639,238 @@ void test7(void) {
639
639
// / the actual implementation uses analyze_os_log::computeOSLogBufferLayout(), which
640
640
// / is tested elsewhere.
641
641
static_assert (__builtin_os_log_format_buffer_size(" %{mask.xyz}s" , " abc" ) != 0, "");
642
+
643
+ // / Copied from test/Sema/constant_builtins_vector.cpp.
644
+ // / Some tests are missing since we run this for multiple targets,
645
+ // / some of which do not support _BitInt.
646
+ #ifndef __AVR__
647
+ namespace convertvector {
648
+ typedef _BitInt (128 ) BitInt128;
649
+
650
+ typedef double vector4double __attribute__ ((__vector_size__(32 )));
651
+ typedef float vector4float __attribute__ ((__vector_size__(16 )));
652
+ typedef long long vector4long __attribute__ ((__vector_size__(32 )));
653
+ typedef int vector4int __attribute__ ((__vector_size__(16 )));
654
+ typedef short vector4short __attribute__ ((__vector_size__(8 )));
655
+ typedef char vector4char __attribute__ ((__vector_size__(4 )));
656
+ typedef BitInt128 vector4BitInt128 __attribute__ ((__vector_size__(64 )));
657
+ typedef double vector8double __attribute__ ((__vector_size__(64 )));
658
+ typedef float vector8float __attribute__ ((__vector_size__(32 )));
659
+ typedef long long vector8long __attribute__ ((__vector_size__(64 )));
660
+ typedef int vector8int __attribute__ ((__vector_size__(32 )));
661
+ typedef short vector8short __attribute__ ((__vector_size__(16 )));
662
+ typedef char vector8char __attribute__ ((__vector_size__(8 )));
663
+ typedef BitInt128 vector8BitInt128 __attribute__ ((__vector_size__(128 )));
664
+
665
+ constexpr vector4double from_vector4double_to_vector4double_var =
666
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4double);
667
+ constexpr vector4float from_vector4double_to_vector4float_var =
668
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4float);
669
+ constexpr vector4long from_vector4double_to_vector4long_var =
670
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4long);
671
+ constexpr vector4int from_vector4double_to_vector4int_var =
672
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4int);
673
+ constexpr vector4short from_vector4double_to_vector4short_var =
674
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4short);
675
+ constexpr vector4char from_vector4double_to_vector4char_var =
676
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4char);
677
+ constexpr vector4BitInt128 from_vector4double_to_vector4BitInt128_var =
678
+ __builtin_convertvector ((vector4double){0 , 1 , 2 , 3 }, vector4BitInt128);
679
+ constexpr vector4double from_vector4float_to_vector4double_var =
680
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4double);
681
+ constexpr vector4float from_vector4float_to_vector4float_var =
682
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4float);
683
+ constexpr vector4long from_vector4float_to_vector4long_var =
684
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4long);
685
+ constexpr vector4int from_vector4float_to_vector4int_var =
686
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4int);
687
+ constexpr vector4short from_vector4float_to_vector4short_var =
688
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4short);
689
+ constexpr vector4char from_vector4float_to_vector4char_var =
690
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4char);
691
+ constexpr vector4BitInt128 from_vector4float_to_vector4BitInt128_var =
692
+ __builtin_convertvector ((vector4float){0 , 1 , 2 , 3 }, vector4BitInt128);
693
+ constexpr vector4double from_vector4long_to_vector4double_var =
694
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4double);
695
+ constexpr vector4float from_vector4long_to_vector4float_var =
696
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4float);
697
+ constexpr vector4long from_vector4long_to_vector4long_var =
698
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4long);
699
+ constexpr vector4int from_vector4long_to_vector4int_var =
700
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4int);
701
+ constexpr vector4short from_vector4long_to_vector4short_var =
702
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4short);
703
+ constexpr vector4char from_vector4long_to_vector4char_var =
704
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4char);
705
+ constexpr vector4BitInt128 from_vector4long_to_vector4BitInt128_var =
706
+ __builtin_convertvector ((vector4long){0 , 1 , 2 , 3 }, vector4BitInt128);
707
+ constexpr vector4double from_vector4int_to_vector4double_var =
708
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4double);
709
+ constexpr vector4float from_vector4int_to_vector4float_var =
710
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4float);
711
+ constexpr vector4long from_vector4int_to_vector4long_var =
712
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4long);
713
+ constexpr vector4int from_vector4int_to_vector4int_var =
714
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4int);
715
+ constexpr vector4short from_vector4int_to_vector4short_var =
716
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4short);
717
+ constexpr vector4char from_vector4int_to_vector4char_var =
718
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4char);
719
+ constexpr vector4BitInt128 from_vector4int_to_vector4BitInt128_var =
720
+ __builtin_convertvector ((vector4int){0 , 1 , 2 , 3 }, vector4BitInt128);
721
+ constexpr vector4double from_vector4short_to_vector4double_var =
722
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4double);
723
+ constexpr vector4float from_vector4short_to_vector4float_var =
724
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4float);
725
+ constexpr vector4long from_vector4short_to_vector4long_var =
726
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4long);
727
+ constexpr vector4int from_vector4short_to_vector4int_var =
728
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4int);
729
+ constexpr vector4short from_vector4short_to_vector4short_var =
730
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4short);
731
+ constexpr vector4char from_vector4short_to_vector4char_var =
732
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4char);
733
+ constexpr vector4BitInt128 from_vector4short_to_vector4BitInt128_var =
734
+ __builtin_convertvector ((vector4short){0 , 1 , 2 , 3 }, vector4BitInt128);
735
+ constexpr vector4double from_vector4char_to_vector4double_var =
736
+ __builtin_convertvector ((vector4char){0 , 1 , 2 , 3 }, vector4double);
737
+ constexpr vector4float from_vector4char_to_vector4float_var =
738
+ __builtin_convertvector ((vector4char){0 , 1 , 2 , 3 }, vector4float);
739
+ constexpr vector4long from_vector4char_to_vector4long_var =
740
+ __builtin_convertvector ((vector4char){0 , 1 , 2 , 3 }, vector4long);
741
+ constexpr vector4int from_vector4char_to_vector4int_var =
742
+ __builtin_convertvector ((vector4char){0 , 1 , 2 , 3 }, vector4int);
743
+ constexpr vector4short from_vector4char_to_vector4short_var =
744
+ __builtin_convertvector ((vector4char){0 , 1 , 2 , 3 }, vector4short);
745
+ constexpr vector4char from_vector4char_to_vector4char_var =
746
+ __builtin_convertvector ((vector4char){0 , 1 , 2 , 3 }, vector4char);
747
+ constexpr vector8double from_vector8double_to_vector8double_var =
748
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
749
+ vector8double);
750
+ constexpr vector8float from_vector8double_to_vector8float_var =
751
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
752
+ vector8float);
753
+ constexpr vector8long from_vector8double_to_vector8long_var =
754
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
755
+ vector8long);
756
+ constexpr vector8int from_vector8double_to_vector8int_var =
757
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
758
+ vector8int);
759
+ constexpr vector8short from_vector8double_to_vector8short_var =
760
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
761
+ vector8short);
762
+ constexpr vector8char from_vector8double_to_vector8char_var =
763
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
764
+ vector8char);
765
+ constexpr vector8BitInt128 from_vector8double_to_vector8BitInt128_var =
766
+ __builtin_convertvector ((vector8double){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
767
+ vector8BitInt128);
768
+ constexpr vector8double from_vector8float_to_vector8double_var =
769
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
770
+ vector8double);
771
+ constexpr vector8float from_vector8float_to_vector8float_var =
772
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
773
+ vector8float);
774
+ constexpr vector8long from_vector8float_to_vector8long_var =
775
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
776
+ vector8long);
777
+ constexpr vector8int from_vector8float_to_vector8int_var =
778
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8int);
779
+ constexpr vector8short from_vector8float_to_vector8short_var =
780
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
781
+ vector8short);
782
+ constexpr vector8char from_vector8float_to_vector8char_var =
783
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
784
+ vector8char);
785
+ constexpr vector8BitInt128 from_vector8float_to_vector8BitInt128_var =
786
+ __builtin_convertvector ((vector8float){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
787
+ vector8BitInt128);
788
+ constexpr vector8double from_vector8long_to_vector8double_var =
789
+ __builtin_convertvector ((vector8long){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
790
+ vector8double);
791
+ constexpr vector8float from_vector8long_to_vector8float_var =
792
+ __builtin_convertvector ((vector8long){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
793
+ vector8float);
794
+ constexpr vector8long from_vector8long_to_vector8long_var =
795
+ __builtin_convertvector ((vector8long){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8long);
796
+ constexpr vector8int from_vector8long_to_vector8int_var =
797
+ __builtin_convertvector ((vector8long){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8int);
798
+ constexpr vector8short from_vector8long_to_vector8short_var =
799
+ __builtin_convertvector ((vector8long){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
800
+ vector8short);
801
+ constexpr vector8char from_vector8long_to_vector8char_var =
802
+ __builtin_convertvector ((vector8long){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8char);
803
+ constexpr vector8double from_vector8int_to_vector8double_var =
804
+ __builtin_convertvector ((vector8int){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
805
+ vector8double);
806
+ constexpr vector8float from_vector8int_to_vector8float_var =
807
+ __builtin_convertvector ((vector8int){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8float);
808
+ constexpr vector8long from_vector8int_to_vector8long_var =
809
+ __builtin_convertvector ((vector8int){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8long);
810
+ constexpr vector8int from_vector8int_to_vector8int_var =
811
+ __builtin_convertvector ((vector8int){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8int);
812
+ constexpr vector8short from_vector8int_to_vector8short_var =
813
+ __builtin_convertvector ((vector8int){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8short);
814
+ constexpr vector8char from_vector8int_to_vector8char_var =
815
+ __builtin_convertvector ((vector8int){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8char);
816
+ constexpr vector8double from_vector8short_to_vector8double_var =
817
+ __builtin_convertvector ((vector8short){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
818
+ vector8double);
819
+ constexpr vector8float from_vector8short_to_vector8float_var =
820
+ __builtin_convertvector ((vector8short){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
821
+ vector8float);
822
+ constexpr vector8long from_vector8short_to_vector8long_var =
823
+ __builtin_convertvector ((vector8short){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
824
+ vector8long);
825
+ constexpr vector8int from_vector8short_to_vector8int_var =
826
+ __builtin_convertvector ((vector8short){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8int);
827
+ constexpr vector8short from_vector8short_to_vector8short_var =
828
+ __builtin_convertvector ((vector8short){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
829
+ vector8short);
830
+ constexpr vector8char from_vector8short_to_vector8char_var =
831
+ __builtin_convertvector ((vector8short){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
832
+ vector8char);
833
+
834
+ constexpr vector8double from_vector8char_to_vector8double_var =
835
+ __builtin_convertvector ((vector8char){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
836
+ vector8double);
837
+ constexpr vector8float from_vector8char_to_vector8float_var =
838
+ __builtin_convertvector ((vector8char){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
839
+ vector8float);
840
+ constexpr vector8long from_vector8char_to_vector8long_var =
841
+ __builtin_convertvector ((vector8char){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8long);
842
+ constexpr vector8int from_vector8char_to_vector8int_var =
843
+ __builtin_convertvector ((vector8char){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8int);
844
+ constexpr vector8short from_vector8char_to_vector8short_var =
845
+ __builtin_convertvector ((vector8char){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
846
+ vector8short);
847
+ constexpr vector8char from_vector8char_to_vector8char_var =
848
+ __builtin_convertvector ((vector8char){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, vector8char);
849
+ constexpr vector8double from_vector8BitInt128_to_vector8double_var =
850
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
851
+ vector8double);
852
+ constexpr vector8float from_vector8BitInt128_to_vector8float_var =
853
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
854
+ vector8float);
855
+ constexpr vector8long from_vector8BitInt128_to_vector8long_var =
856
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
857
+ vector8long);
858
+ constexpr vector8int from_vector8BitInt128_to_vector8int_var =
859
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
860
+ vector8int);
861
+ constexpr vector8short from_vector8BitInt128_to_vector8short_var =
862
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
863
+ vector8short);
864
+ constexpr vector8char from_vector8BitInt128_to_vector8char_var =
865
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
866
+ vector8char);
867
+ constexpr vector8BitInt128 from_vector8BitInt128_to_vector8BitInt128_var =
868
+ __builtin_convertvector ((vector8BitInt128){0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
869
+ vector8BitInt128);
870
+ static_assert (from_vector8BitInt128_to_vector8BitInt128_var[0 ] == 0 , " " ); // ref-error {{not an integral constant expression}}
871
+ static_assert (from_vector8BitInt128_to_vector8BitInt128_var[1 ] == 1 , " " ); // ref-error {{not an integral constant expression}}
872
+ static_assert (from_vector8BitInt128_to_vector8BitInt128_var[2 ] == 2 , " " ); // ref-error {{not an integral constant expression}}
873
+ static_assert (from_vector8BitInt128_to_vector8BitInt128_var[3 ] == 3 , " " ); // ref-error {{not an integral constant expression}}
874
+ static_assert (from_vector8BitInt128_to_vector8BitInt128_var[4 ] == 4 , " " ); // ref-error {{not an integral constant expression}}
875
+ }
876
+ #endif
0 commit comments