Allow strings in __builtin_constant_p

tccgen.c:
- Fix handling __builtin_constant_p

tests/bug.c:
- Remove tst3

tests/tcctest.c:
- Add new tests for __builtin_constant_p
This commit is contained in:
herman ten brugge 2020-09-17 09:11:10 +02:00
parent 4a16bebfab
commit c9bbd4e707
3 changed files with 6 additions and 9 deletions

View File

@ -5701,7 +5701,8 @@ ST_FUNC void unary(void)
break; break;
case TOK_builtin_constant_p: case TOK_builtin_constant_p:
parse_builtin_params(1, "e"); parse_builtin_params(1, "e");
n = (vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST; n = (vtop->r & (VT_VALMASK | VT_LVAL)) == VT_CONST &&
!((vtop->r & VT_SYM) && vtop->sym->a.addrtaken);
vtop--; vtop--;
vpushi(n); vpushi(n);
break; break;

View File

@ -1,13 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
void tst3(void)
{
/* Should VT_SYM be checked for TOK_builtin_constant_p */
int r = __builtin_constant_p("c");
if (r == 0) printf("%d\n",r);
}
int compile_errors(void) int compile_errors(void)
{ {
#if TEST == 1 #if TEST == 1
@ -45,5 +38,4 @@ int compile_errors(void)
int int
main(void) main(void)
{ {
tst3();
} }

View File

@ -3681,6 +3681,8 @@ void asm_test(void)
int constant_p_var; int constant_p_var;
int func(void);
void builtin_test(void) void builtin_test(void)
{ {
short s; short s;
@ -3719,6 +3721,8 @@ void builtin_test(void)
#else #else
printf("res8 = %d\n", __builtin_constant_p(i && 0 ? i : 34)); printf("res8 = %d\n", __builtin_constant_p(i && 0 ? i : 34));
#endif #endif
printf("res9 = %d\n", __builtin_constant_p("hi"));
printf("res10 = %d\n", __builtin_constant_p(func()));
s = 1; s = 1;
ll = 2; ll = 2;
i = __builtin_choose_expr (1 != 0, ll, s); i = __builtin_choose_expr (1 != 0, ll, s);