10c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis// RUN: %clang_cc1 %s -emit-pch -o %t1.pch -verify
20c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis// RUN: %clang_cc1 %s -emit-pch -o %t2.pch -include-pch %t1.pch -verify
30c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only %s -include-pch %t2.pch -verify
40c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
50c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis// Test that a redefinition inside the PCH won't manifest as an ambiguous macro.
60c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis// rdar://13016031
70c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
80c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#ifndef HEADER1
90c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#define HEADER1
100c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
110c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#define M1 0 // expected-note {{previous}}
120c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#define M1 1 // expected-warning {{redefined}}
130c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
140c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#define M2 3
150c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
160c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#elif !defined(HEADER2)
170c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#define HEADER2
180c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
190c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#define M2 4 // expected-warning {{redefined}}
200c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis // expected-note@-6 {{previous}}
210c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
220c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#else
230c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
240c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis// Use the error to verify it was parsed.
250c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidisint x = M1; // expected-note {{previous}}
260c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidisint x = M2; // expected-error {{redefinition}}
270c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis
280c06cbc51c581ea31dac14134bd184e491fe5cafArgyrios Kyrtzidis#endif
29