http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47444
--- Comment #8 from eidletni at mail dot ru 2011-01-25 18:46:50 UTC ---
(In reply to comment #1)
> >because constructor of struct A never called with "bad"
> How can that be true if the compiler does not know that or could figure that
> out?
In this case I'm expecting nothing.
So, if compiler is smart enough to say 'may be above', why in this simple code
I see no warning:
bool f(unsigned i)
{
bool v[2] = { 1, 1 };
return v[i];
}
?
and if we continue, in this code, which EXACTLY have array overflow, I see no
warning:
bool f(unsigned i)
{
bool v[2] = { 1, 1 };
return v[i];
}
void g() { f(1000); }
(In reply to comment #1)
> if ( i>=SIZE && f1() )
> throw 1;
> bool v[SIZE] = { 1, 1 };
> return v[i];
>
>
> If f1 returns false, then you have above array bounds access.
I repeat, if I REMOVE this code "if ( i>=SIZE && f1() )", which is equal to f1
function return false, warning message disappears!
(In reply to comment #0)
> Warning disappears if:
> *) remove f1() call in "if ( i>=SIZE && f1() )"
> *) make "return true" instead of "throw 1"
> *) inline struct A constructor, "inline A::A(unsigned i)"
> *) make size of array "bool v[]" equal 1, "enum { SIZE = 1 }"
I really don't understand, why you guys so easily set wontfix to this bug.
Nobody cares that "inlining constructor" or "return instead throw" depends on
printing warning message?