Likely the last big bug in C area

I think we have a bug in clang that should be fixed before 2.7.

According to C99 6.2.1p4 the scope of tag declarations, when embedded in
a declarator inside a function parameter list, should be the function
block (this is not true for C++: see 3.3.1p5).

This means that:

void f(struct s *x) {
  struct s { int f; } *y = x;

should be legal according to C99 but not legal according to C++.

Clang currently believes that this code is not legal for both.

The bug has already been inserted in bugzilla: