[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#218803: gcc: (possible) bogus expansion of dynamic arrays within switch statements



Andrew Suffield <asuffield@debian.org> writes:

> Package: gcc-3.3
> 
> [This is also present in gcc-3.2, and probably all 3.x versions; it is
> inapplicable for 2.95, which didn't support dynamic arrays]

Huh? It did.

> int main(void)
> {
>   int foo = 0;
>   int bar;
>   int len = 5;
>   switch(foo)
>     {
>     case 0:
>       bar = 1;
>       char buf[len];
>     }
> }
>
> I'm not sure whether the original code is supposed to compile or not;

I don't see why it shouldn't.

> I suspect that it currently miscompiles.

Indeed. Looking at the assembly, even for

int f(int len) {
  if (0) {
    char buf[len];
  }
}

code is generated to allocate "len" bytes, which is bad, since len
might be -1 or something.

> What the heck is the scope of a variable declared in this position?

Till the end of the containing block.

-- 
	Falk



Reply to: