summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-01-10 00:46:21 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-01-10 00:46:21 +0000
commitd281a7146a15f4fe308b5d506a2d32c29c3ca2a0 (patch)
tree8980a15de27fa51576b673f09221ace91885e988
parent620327d66b36089d0291da9f91dd137f503cc5c3 (diff)
downloadbcm5719-llvm-d281a7146a15f4fe308b5d506a2d32c29c3ca2a0.tar.gz
bcm5719-llvm-d281a7146a15f4fe308b5d506a2d32c29c3ca2a0.zip
Fix PR5982, a refacto in checking for '=' in a -D argument.
llvm-svn: 93088
-rw-r--r--clang/lib/Frontend/InitPreprocessor.cpp13
-rw-r--r--clang/test/Frontend/macros.c4
2 files changed, 9 insertions, 8 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index c5fc5f9f746..841463c8e98 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -27,19 +27,16 @@ using namespace clang;
// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
// "#define XXX Y z W". To get a #define with no value, use "XXX=".
static void DefineBuiltinMacro(MacroBuilder &Builder, llvm::StringRef Macro,
- Diagnostic *Diags = 0) {
+ Diagnostic &Diags) {
std::pair<llvm::StringRef, llvm::StringRef> MacroPair = Macro.split('=');
llvm::StringRef MacroName = MacroPair.first;
llvm::StringRef MacroBody = MacroPair.second;
- if (!MacroBody.empty()) {
+ if (MacroName.size() != Macro.size()) {
// Per GCC -D semantics, the macro ends at \n if it exists.
llvm::StringRef::size_type End = MacroBody.find_first_of("\n\r");
- if (End != llvm::StringRef::npos) {
- assert(Diags && "Unexpected macro with embedded newline!");
- Diags->Report(diag::warn_fe_macro_contains_embedded_newline)
+ if (End != llvm::StringRef::npos)
+ Diags.Report(diag::warn_fe_macro_contains_embedded_newline)
<< MacroName;
- }
-
Builder.defineMacro(MacroName, MacroBody.substr(0, End));
} else {
// Push "macroname 1".
@@ -490,7 +487,7 @@ void clang::InitializePreprocessor(Preprocessor &PP,
Builder.undefineMacro(InitOpts.Macros[i].first);
else
DefineBuiltinMacro(Builder, InitOpts.Macros[i].first,
- &PP.getDiagnostics());
+ PP.getDiagnostics());
}
// If -imacros are specified, include them now. These are processed before
diff --git a/clang/test/Frontend/macros.c b/clang/test/Frontend/macros.c
new file mode 100644
index 00000000000..317079709c6
--- /dev/null
+++ b/clang/test/Frontend/macros.c
@@ -0,0 +1,4 @@
+// RUN: %clang_cc1 -DA= -DB=1 -verify -fsyntax-only %s
+
+int a[(B A) == 1 ? 1 : -1];
+
OpenPOWER on IntegriCloud