redefinition errors

Chris said this is a known problem, but I thought I should document
the full oddity of what I'm seeing:

// incorrectly generates redefinition error
extern int array[3];
int array[3];

// correctly generates no diagnostics
extern void foo(void);
void foo(void) {}

// incorrectly generates a redefinition error
extern void bar();
void bar() {}

// correctly generates no diagnostics
extern void baz(int i);
void baz(int i) {}

// incorrectly generates a redefinition error
extern void nup(int a[3]);
void nup(int a[3]) {}

-Keith