// RUN: %clang_cc1 -verify -std=c2y -Wall -pedantic -Wno-unused %s /* WG14 N3410: No * Slay Some Earthly Demons XI * * It is now ill-formed for the same identifier within a TU to have both * internal and external linkage. */ void func1() { extern int a; // #a } // This 'a' is the same as the one declared extern above. static int a; /* expected-error {{static declaration of 'a' follows non-static declaration}} expected-note@#a {{previous declaration is here}} */ static int b; void func2() { // This 'b' is the same as the one declaraed static above, but this is not // ill-formed because of C2y 6.2.2p4, which gives this variable internal // linkage because the previous declaration had internal linkage. extern int b; // Ok } static int c, d; void func3() { int c; // no linkage, different object from the one declared above. for (int d;;) { // This 'c' is the same as the one declared at file scope, but because of // the local scope 'c', the file scope 'c' is not visible. // FIXME: This should be diagnosed under N3410. extern int c; // This 'd' is the same as the one declared at file scope as well, but // because of the 'd' declared within the for loop, the file scope 'd' is // also not visible, same as with 'c'. // FIXME: This should be diagnosed under N3410. extern int d; } for (static int e;;) { extern int e; // Ok for the same reason as 'b' above. } }