On Sun, Jul 08, 2007 at 06:42:18AM +0100, Al Viro wrote:
> {
>       struct st;
>       struct st *p;
>       ...
>       struct st {....} x;
>       ...
> }
> 
> will make p a pointer to struct st from that scope.  If you omit it,
> p will be a pointer to struct st from the outer scope and x will have
> a different type.  Too late beginning of file scope, perhaps?

Gyah...  So it is.  We put the stuff from -include into builtin_scope
and start the file scope only in __sparse().

See if adding
int is_outer_scope(struct scope *scope)
{
        if (scope == block_scope)
                return 0;
        if (scope == &builtin_scope && block_scope->next == &builtin_scope)
                return 0;
        return 1;
}
to scope.c and replacing
                sym = lookup_symbol(token->ident, NS_STRUCT);
                if (!sym ||
                    (sym->scope != block_scope &&
                     (match_op(token->next,';') || match_op(token->next,'{')))) 
{
with
                sym = lookup_symbol(token->ident, NS_STRUCT);
                if (!sym ||
                    (is_outer_scope(sym->scope) &&
                     (match_op(token->next,';') || match_op(token->next,'{')))) 
{
in parse.c:struct_union_enum_specifier() would fix all problems of that kind.
-
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to