From 1ffbc3a92a56666d85f279ead9e1c3d0ae71af51 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Wed, 23 Jan 2013 18:21:56 +0000 Subject: [PATCH] [PCH] Temporarily disable the "ambiguous macro" warning that is currently bogus with a PCH that redefined a macro without undef'ing it first. Proper reconstruction of the macro info history from modules will properly fix this in subsequent commits. rdar://13016031 llvm-svn: 173281 --- clang/lib/Lex/PPMacroExpansion.cpp | 4 ++++ clang/test/Modules/macros.c | 1 + clang/test/PCH/macro-redef.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 clang/test/PCH/macro-redef.c diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 7901705fec33..63791448858e 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -377,6 +377,9 @@ bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, } } + // FIXME: Temporarily disable this warning that is currently bogus with a PCH + // that redefined a macro without undef'ing it first (test/PCH/macro-redef.c). +#if 0 // If the macro definition is ambiguous, complain. if (MI->isAmbiguous()) { Diag(Identifier, diag::warn_pp_ambiguous_macro) @@ -392,6 +395,7 @@ bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, } } } +#endif // If we started lexing a macro, enter the macro expansion body. diff --git a/clang/test/Modules/macros.c b/clang/test/Modules/macros.c index f6b47442c4cd..1178711cd299 100644 --- a/clang/test/Modules/macros.c +++ b/clang/test/Modules/macros.c @@ -1,3 +1,4 @@ +// XFAIL: * // RUN: rm -rf %t // RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodule-cache-path %t -fmodule-name=macros_top %S/Inputs/module.map // RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodule-cache-path %t -fmodule-name=macros_left %S/Inputs/module.map diff --git a/clang/test/PCH/macro-redef.c b/clang/test/PCH/macro-redef.c new file mode 100644 index 000000000000..7e25d7f5a2f8 --- /dev/null +++ b/clang/test/PCH/macro-redef.c @@ -0,0 +1,28 @@ +// RUN: %clang_cc1 %s -emit-pch -o %t1.pch -verify +// RUN: %clang_cc1 %s -emit-pch -o %t2.pch -include-pch %t1.pch -verify +// RUN: %clang_cc1 -fsyntax-only %s -include-pch %t2.pch -verify + +// Test that a redefinition inside the PCH won't manifest as an ambiguous macro. +// rdar://13016031 + +#ifndef HEADER1 +#define HEADER1 + +#define M1 0 // expected-note {{previous}} +#define M1 1 // expected-warning {{redefined}} + +#define M2 3 + +#elif !defined(HEADER2) +#define HEADER2 + +#define M2 4 // expected-warning {{redefined}} + // expected-note@-6 {{previous}} + +#else + +// Use the error to verify it was parsed. +int x = M1; // expected-note {{previous}} +int x = M2; // expected-error {{redefinition}} + +#endif -- 2.34.1