xref: /llvm-project/clang/test/Sema/count-builtins.c (revision c1c2551a2876f536b5a06f48fa809aeedbc3d7ba)
1 // RUN: %clang_cc1 -std=c23 -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -Wpedantic %s
2 
3 typedef int int2 __attribute__((ext_vector_type(2)));
4 
5 void test_builtin_popcountg(short s, int i, __int128 i128, _BitInt(128) bi128,
6                             double d, int2 i2) {
7   __builtin_popcountg();
8   // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
9   __builtin_popcountg(i, i);
10   // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
11   __builtin_popcountg(s);
12   // expected-error@-1 {{1st argument must be an unsigned integer (was 'short')}}
13   __builtin_popcountg(i);
14   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int')}}
15   __builtin_popcountg(i128);
16   // expected-error@-1 {{1st argument must be an unsigned integer (was '__int128')}}
17   __builtin_popcountg(bi128);
18   // expected-error@-1 {{1st argument must be an unsigned integer (was '_BitInt(128)')}}
19   __builtin_popcountg(d);
20   // expected-error@-1 {{1st argument must be an unsigned integer (was 'double')}}
21   __builtin_popcountg(i2);
22   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int2' (vector of 2 'int' values))}}
23 }
24 
25 void test_builtin_clzg(short s, int i, unsigned int ui, __int128 i128,
26                        _BitInt(128) bi128, double d, int2 i2) {
27   __builtin_clzg();
28   // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
29   __builtin_clzg(i, i, i);
30   // expected-error@-1 {{too many arguments to function call, expected at most 2, have 3}}
31   __builtin_clzg(s);
32   // expected-error@-1 {{1st argument must be an unsigned integer (was 'short')}}
33   __builtin_clzg(i);
34   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int')}}
35   __builtin_clzg(i128);
36   // expected-error@-1 {{1st argument must be an unsigned integer (was '__int128')}}
37   __builtin_clzg(bi128);
38   // expected-error@-1 {{1st argument must be an unsigned integer (was '_BitInt(128)')}}
39   __builtin_clzg(d);
40   // expected-error@-1 {{1st argument must be an unsigned integer (was 'double')}}
41   __builtin_clzg(i2);
42   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int2' (vector of 2 'int' values))}}
43   __builtin_clzg(i2);
44   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int2' (vector of 2 'int' values))}}
45   __builtin_clzg(ui, ui);
46   // expected-error@-1 {{2nd argument must be an 'int' (was 'unsigned int')}}
47   __builtin_clzg(ui, i128);
48   // expected-error@-1 {{2nd argument must be an 'int' (was '__int128')}}
49   __builtin_clzg(ui, bi128);
50   // expected-error@-1 {{2nd argument must be an 'int' (was '_BitInt(128)')}}
51   __builtin_clzg(ui, d);
52   // expected-error@-1 {{2nd argument must be an 'int' (was 'double')}}
53   __builtin_clzg(ui, i2);
54   // expected-error@-1 {{2nd argument must be an 'int' (was 'int2' (vector of 2 'int' values))}}
55 }
56 
57 void test_builtin_ctzg(short s, int i, unsigned int ui, __int128 i128,
58                        _BitInt(128) bi128, double d, int2 i2) {
59   __builtin_ctzg();
60   // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
61   __builtin_ctzg(i, i, i);
62   // expected-error@-1 {{too many arguments to function call, expected at most 2, have 3}}
63   __builtin_ctzg(s);
64   // expected-error@-1 {{1st argument must be an unsigned integer (was 'short')}}
65   __builtin_ctzg(i);
66   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int')}}
67   __builtin_ctzg(i128);
68   // expected-error@-1 {{1st argument must be an unsigned integer (was '__int128')}}
69   __builtin_ctzg(bi128);
70   // expected-error@-1 {{1st argument must be an unsigned integer (was '_BitInt(128)')}}
71   __builtin_ctzg(d);
72   // expected-error@-1 {{1st argument must be an unsigned integer (was 'double')}}
73   __builtin_ctzg(i2);
74   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int2' (vector of 2 'int' values))}}
75   __builtin_ctzg(i2);
76   // expected-error@-1 {{1st argument must be an unsigned integer (was 'int2' (vector of 2 'int' values))}}
77   __builtin_ctzg(ui, ui);
78   // expected-error@-1 {{2nd argument must be an 'int' (was 'unsigned int')}}
79   __builtin_ctzg(ui, i128);
80   // expected-error@-1 {{2nd argument must be an 'int' (was '__int128')}}
81   __builtin_ctzg(ui, bi128);
82   // expected-error@-1 {{2nd argument must be an 'int' (was '_BitInt(128)')}}
83   __builtin_ctzg(ui, d);
84   // expected-error@-1 {{2nd argument must be an 'int' (was 'double')}}
85   __builtin_ctzg(ui, i2);
86   // expected-error@-1 {{2nd argument must be an 'int' (was 'int2' (vector of 2 'int' values))}}
87 }
88