This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Using fold() in frontends


Giovanni Bajo wrote:

But how are you proposing to handle the fact that the C++ FE needs to fold
constant expressions (in the ISO C++ sense of 'constant expressions)? For
instance, we need to fold "1+1" into "2" much before gimplification. Should
a part of fold() be extracted and duplicated in the C++ frontend?

This has actually already been discussed.


We don't need anything like the generality of fold. All we need is the ability to perform basic arithmetic on integer constants. (And, perhaps, as an extension, floating-point constants.) In fact, it is better not to use "fold"; we want to make sure that the semantics are 100% under the control of the C++ front end.

We just need to write a recursive routine that works in the obvious way:

  switch (code) {
  case PLUS_EXPR:
    return int_const_binop (PLUS_EXPR, cxx_fold (op1), cxx_fold (op2));
  ...
  }

and use it in fold_non_dependent_expr, and other similar places. (Since we're no longer calling fold, tsubst_copy_and_build will give us back a tree that needs to be simplified; that's were we call cxx_fold.)

--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]