History

Implement __builtin_choose_expr

Follows GCC implementation.

Michael Matz committed 10 years ago

Commit 8a1a2a61 parent 10e4db43 files · +43 −0Browse files

Unified · Split

3 files
  1. tccgen.c +29 −0
  2. tcctok.h +1 −0
  3. tests/tcctest.c +13 −0
tccgen.c+29−0
@@ -4238,6 +4238,35 @@ ST_FUNC void unary(void) · 4237 unmodified lines
42384238 vpushi(is_compatible_types(&type1, &type2));
42394239 }
42404240 break;
4241+ case TOK_builtin_choose_expr:
4242+ {
4243+ int saved_nocode_wanted, c;
4244+ next();
4245+ skip('(');
4246+ c = expr_const();
4247+ skip(',');
4248+ if (!c) {
4249+ saved_nocode_wanted = nocode_wanted;
4250+ nocode_wanted = 1;
4251+ }
4252+ expr_eq();
4253+ if (!c) {
4254+ vpop();
4255+ nocode_wanted = saved_nocode_wanted;
4256+ }
4257+ skip(',');
4258+ if (c) {
4259+ saved_nocode_wanted = nocode_wanted;
4260+ nocode_wanted = 1;
4261+ }
4262+ expr_eq();
4263+ if (c) {
4264+ vpop();
4265+ nocode_wanted = saved_nocode_wanted;
4266+ }
4267+ skip(')');
4268+ }
4269+ break;
42414270 case TOK_builtin_constant_p:
42424271 {
42434272 int saved_nocode_wanted, res;
tcctok.h+1−0
@@ -132,6 +132,7 @@ · 131 unmodified lines
132132 DEF(TOK_VISIBILITY1, "visibility")
133133 DEF(TOK_VISIBILITY2, "__visibility__")
134134 DEF(TOK_builtin_types_compatible_p, "__builtin_types_compatible_p")
135+ DEF(TOK_builtin_choose_expr, "__builtin_choose_expr")
135136 DEF(TOK_builtin_constant_p, "__builtin_constant_p")
136137 DEF(TOK_builtin_frame_address, "__builtin_frame_address")
137138 DEF(TOK_builtin_return_address, "__builtin_return_address")
tests/tcctest.c+13−0
@@ -2685,6 +2685,9 @@ int constant_p_var; · 2684 unmodified lines
26852685
26862686 void builtin_test(void)
26872687 {
2688+ short s;
2689+ int i;
2690+ long long ll;
26882691 #if GCC_MAJOR >= 3
26892692 COMPAT_TYPE(int, int);
26902693 COMPAT_TYPE(int, unsigned int);
@@ -2704,6 +2707,16 @@ void builtin_test(void) · 13 unmodified lines
27042707 printf("res = %d\n", __builtin_constant_p(1 + 2));
27052708 printf("res = %d\n", __builtin_constant_p(&constant_p_var));
27062709 printf("res = %d\n", __builtin_constant_p(constant_p_var));
2710+ s = 1;
2711+ ll = 2;
2712+ i = __builtin_choose_expr (1 != 0, ll, s);
2713+ printf("bce: %d\n", i);
2714+ i = __builtin_choose_expr (1 != 1, ll, s);
2715+ printf("bce: %d\n", i);
2716+ i = sizeof (__builtin_choose_expr (1, ll, s));
2717+ printf("bce: %d\n", i);
2718+ i = sizeof (__builtin_choose_expr (0, ll, s));
2719+ printf("bce: %d\n", i);
27072720 }
27082721
27092722 #ifndef _WIN32

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t