type: handle strings better
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 28 Jan 2013 06:34:10 +0000 (28 09:34 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Mon, 28 Jan 2013 06:34:10 +0000 (28 09:34 +0300)
Add EXPR_STRING to get_type.  Also if it's a const string pointer then I
don't want is_pointer() to return turn.

The is_pointer() function is poorly named.  It wants to know if the pointer
is an lvalue.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch_type.c

index 9426e4d..2e50ec2 100644 (file)
@@ -190,6 +190,8 @@ struct symbol *get_type(struct expression *expr)
        expr = strip_parens(expr);
 
        switch (expr->type) {
+       case EXPR_STRING:
+               return &string_ctype;
        case EXPR_SYMBOL:
                return get_type_symbol(expr);
        case EXPR_DEREF:
@@ -276,6 +278,8 @@ int is_pointer(struct expression *expr)
        sym = get_type(expr);
        if (!sym)
                return 0;
+       if (sym == &string_ctype)
+               return 0;
        if (sym->type == SYM_PTR)
                return 1;
        return 0;