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