Home
       cc1: Reduce to unary for sizeof expressions - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 4a0c2ccd2a49423967a9f0826bdfc012739327c7
   DIR parent eb8960812d92714eb568df36e09d8c76af5cd46c
  HTML Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Mon,  7 Oct 2024 17:15:05 +0200
       
       cc1: Reduce to unary for sizeof expressions
       
       The grammar is clear and sizeof applies to a unary expression,
       but the code was reducing to a cast expression, creating problems
       with expresions like:
       
               sizeof "hello" - 1
       
       or accepting invalid expressions like:
       
               sizeof (char *) 3
       
       Diffstat:
         M src/cmd/cc/cc1/expr.c               |       6 +++---
       
       1 file changed, 3 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/src/cmd/cc/cc1/expr.c b/src/cmd/cc/cc1/expr.c
       @@ -843,7 +843,7 @@ typeof(Node *np)
                return tp;
        }
        
       -static Node *cast(void);
       +static Node *unary(void), *cast(void);
        
        static Type *
        sizeexp(void)
       @@ -851,7 +851,7 @@ sizeexp(void)
                Type *tp;
        
                if (!accept('('))
       -                return typeof(cast());
       +                return typeof(unary());
        
                switch (yytoken) {
                case TYPE:
       @@ -859,7 +859,7 @@ sizeexp(void)
                        tp = typename();
                        break;
                default:
       -                tp = typeof(cast());
       +                tp = typeof(unary());
                        break;
                }
                expect(')');