[Bug c/8268] no compile time array index checking

falk at debian dot org gcc-bugzilla@gcc.gnu.org
Sat Feb 18 12:58:00 GMT 2006



------- Comment #23 from falk at debian dot org  2006-02-18 12:58 -------
(In reply to comment #21)
> hmm, thanks. it should have looked like this:
> 
> +      case TRY_FINALLY_EXPR:
> +      case TRY_CATCH_EXPR:
> +        array_offset_warning (&TREE_OPERAND (t, 0));
> +        array_offset_warning (&TREE_OPERAND (t, 1));
> +        break;
> +      case CATCH_EXPR:
> +       array_offset_warning (&CATCH_BODY (t));
> +       break;
> 
> Anyway, I agree that the SSA pass after all const folding has happened is a 
> much better approach than my quick hack, as long as it isn't significantly
> slower (compile time). I'm currently trying Falk's patch. 

The problem it had was with inlining: code like

static inline int f(int a[], int b) {
    return a[b]; // line 2
}

int g(void) {
    int a[2] = {1, 2};
    return f(a, 2); // line 7
}

To really be helpful, the warning should say something like "array access
out of bound in line 2 after inlining in line 7", but I don't know how
to achieve that. The "uninitialized" warning has the same problem by running
so late; it punts and just says "a used uninitialized in g", which seems
kinda lame.

Anyway, the warning is probably still useful if this is not resolved...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8268



More information about the Gcc-bugs mailing list