]> granicus.if.org Git - clang/commitdiff
Fix PR5982, a refacto in checking for '=' in a -D argument.
authorDaniel Dunbar <daniel@zuster.org>
Sun, 10 Jan 2010 00:46:21 +0000 (00:46 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sun, 10 Jan 2010 00:46:21 +0000 (00:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93088 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/InitPreprocessor.cpp
test/Frontend/macros.c [new file with mode: 0644]

index c5fc5f9f7460dff2c7344eb94bf7d210af14ed59..841463c8e981a77c17c6a7103dbfbcdef06263c2 100644 (file)
@@ -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/test/Frontend/macros.c b/test/Frontend/macros.c
new file mode 100644 (file)
index 0000000..3170797
--- /dev/null
@@ -0,0 +1,4 @@
+// RUN: %clang_cc1 -DA= -DB=1 -verify -fsyntax-only %s
+
+int a[(B A) == 1 ? 1 : -1];
+