This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: new __builtin_choose_type (patch) (new builtin_equal_types patch)
- To: "Joseph S. Myers" <jsm28 at cam dot ac dot uk>
- Subject: Re: new __builtin_choose_type (patch) (new builtin_equal_types patch)
- From: Aldy Hernandez <aldyh at redhat dot com>
- Date: 07 Oct 2001 19:59:50 -0400
- Cc: Jakub Jelinek <jakub at redhat dot com>, <gcc at gcc dot gnu dot org>
- References: <Pine.LNX.4.33.0110051155010.22550-100000@kern.srcf.societies.cam.ac.uk>
>>>>> "Joseph" == Joseph S Myers <jsm28@cam.ac.uk> writes:
Ok, sorry for the delay.
> __builtin_choose_expr (C, E1, E2) - returns E1 (and has the type of E1) if
> C is true, otherwise returns E2 (and has the type of E2). C must be an
> integer constant expression.
So C is a constant? If so, is the following patch what is needed for
__buildin_choose_expr?
Cheers.
Aldy
2001-10-07 Aldy Hernandez <aldyh@redhat.com>
* c-common.h (rid): Add RID_CHOOSE_EXPR.
* c-parse.in (reswords): Add __builtin_choose_expr.
Add CHOOSE_EXPR token.
Add production for CHOOSE_EXPR.
Index: c-parse.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-parse.in,v
retrieving revision 1.106
diff -c -p -r1.106 c-parse.in
*** c-parse.in 2001/09/21 01:26:52 1.106
--- c-parse.in 2001/10/07 23:55:27
*************** end ifc
*** 121,127 ****
%token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
%token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
%token ATTRIBUTE EXTENSION LABEL
! %token REALPART IMAGPART VA_ARG
%token PTR_VALUE PTR_BASE PTR_EXTENT
/* function name can be a string const or a var decl. */
--- 121,127 ----
%token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
%token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
%token ATTRIBUTE EXTENSION LABEL
! %token REALPART IMAGPART VA_ARG CHOOSE_EXPR
%token PTR_VALUE PTR_BASE PTR_EXTENT
/* function name can be a string const or a var decl. */
*************** primary:
*** 710,715 ****
--- 710,717 ----
{ $$ = build_function_call ($1, $3); }
| VA_ARG '(' expr_no_commas ',' typename ')'
{ $$ = build_va_arg ($3, groktypename ($5)); }
+ | CHOOSE_EXPR '(' CONSTANT ',' expr_no_commas ',' expr_no_commas ')'
+ { $$ = integer_zerop ($3) ? $7 : $5; }
| primary '[' expr ']' %prec '.'
{ $$ = build_array_ref ($1, $3); }
| primary '.' identifier
*************** static const struct resword reswords[] =
*** 3290,3295 ****
--- 3292,3298 ----
{ "__attribute__", RID_ATTRIBUTE, 0 },
{ "__bounded", RID_BOUNDED, 0 },
{ "__bounded__", RID_BOUNDED, 0 },
+ { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 },
{ "__builtin_va_arg", RID_VA_ARG, 0 },
{ "__complex", RID_COMPLEX, 0 },
{ "__complex__", RID_COMPLEX, 0 },
*************** static const short rid_to_yy[RID_MAX] =
*** 3461,3466 ****
--- 3464,3470 ----
/* RID_PTRBASE */ PTR_BASE,
/* RID_PTREXTENT */ PTR_EXTENT,
/* RID_PTRVALUE */ PTR_VALUE,
+ /* RID_CHOOSE_EXPR */ CHOOSE_EXPR,
/* RID_FUNCTION_NAME */ STRING_FUNC_NAME,
/* RID_PRETTY_FUNCTION_NAME */ STRING_FUNC_NAME,
Index: c-common.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-common.h,v
retrieving revision 1.85
diff -c -p -r1.85 c-common.h
*** c-common.h 2001/09/22 13:14:34 1.85
--- c-common.h 2001/10/07 23:55:27
*************** enum rid
*** 74,80 ****
/* C extensions */
RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE,
! RID_PTREXTENT, RID_PTRVALUE,
/* Too many ways of getting the name of a function as a string */
RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
--- 74,80 ----
/* C extensions */
RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE,
! RID_PTREXTENT, RID_PTRVALUE, RID_CHOOSE_EXPR,
/* Too many ways of getting the name of a function as a string */
RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,