1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li // C++ [basic.def.odr]p1: 4*67e74705SXin Li // No translation unit shall contain more than one definition of any 5*67e74705SXin Li // variable, [...]. 6*67e74705SXin Li 7*67e74705SXin Li // Bad: in C++, these are both definitions. None of that C99 tentative stuff. 8*67e74705SXin Li int i; // expected-note {{previous}} 9*67e74705SXin Li int i; // expected-error {{redefinition}} 10*67e74705SXin Li 11*67e74705SXin Li // OK: decl + def 12*67e74705SXin Li extern int j; 13*67e74705SXin Li int j; 14*67e74705SXin Li 15*67e74705SXin Li // OK: def + decl 16*67e74705SXin Li int k; 17*67e74705SXin Li extern int k; 18*67e74705SXin Li 19*67e74705SXin Li // Bad. The important thing here is that we don't emit the diagnostic twice. 20*67e74705SXin Li int l = 1; // expected-note {{previous}} 21*67e74705SXin Li int l = 2; // expected-error {{redefinition}} 22