]> granicus.if.org Git - clang/commitdiff
PR4288: Make -dD (dump macros with preprocessed source) play nicely with
authorEli Friedman <eli.friedman@gmail.com>
Tue, 2 Jun 2009 07:55:39 +0000 (07:55 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 2 Jun 2009 07:55:39 +0000 (07:55 +0000)
# line directives.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72724 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/PrintPreprocessedOutput.cpp
test/Preprocessor/dump-macros-spacing.c [new file with mode: 0644]

index e79453c28c8ca30b564b44d8c0e5675825458b5e..89d099caf8a91d148108b180788ec67339e878d8 100644 (file)
@@ -87,6 +87,7 @@ public:
 private:
   unsigned CurLine;
   bool EmittedTokensOnThisLine;
+  bool EmittedMacroOnThisLine;
   SrcMgr::CharacteristicKind FileType;
   llvm::SmallString<512> CurFilename;
   bool Initialized;
@@ -100,6 +101,7 @@ public:
     CurLine = 0;
     CurFilename += "<uninit>";
     EmittedTokensOnThisLine = false;
+    EmittedMacroOnThisLine = false;
     FileType = SrcMgr::C_User;
     Initialized = false;
   }
@@ -130,9 +132,10 @@ public:
 void PrintPPOutputPPCallbacks::WriteLineInfo(unsigned LineNo,
                                              const char *Extra,
                                              unsigned ExtraLen) {
-  if (EmittedTokensOnThisLine) {
+  if (EmittedTokensOnThisLine || EmittedMacroOnThisLine) {
     OS << '\n';
     EmittedTokensOnThisLine = false;
+    EmittedMacroOnThisLine = false;
   }
 
   OS << '#' << ' ' << LineNo << ' ' << '"';
@@ -161,11 +164,12 @@ bool PrintPPOutputPPCallbacks::MoveToLine(SourceLocation Loc) {
     
     CurLine = LineNo;
     
-    if (!EmittedTokensOnThisLine)
+    if (!EmittedTokensOnThisLine && !EmittedMacroOnThisLine)
       return true;
     
     OS << '\n';
     EmittedTokensOnThisLine = false;
+    EmittedMacroOnThisLine = false;
     return true;
   }
 
@@ -260,6 +264,7 @@ void PrintPPOutputPPCallbacks::MacroDefined(const IdentifierInfo *II,
   
   MoveToLine(MI->getDefinitionLoc());
   PrintMacroDefinition(*II, *MI, PP, OS);
+  EmittedMacroOnThisLine = true;
 }
 
 
diff --git a/test/Preprocessor/dump-macros-spacing.c b/test/Preprocessor/dump-macros-spacing.c
new file mode 100644 (file)
index 0000000..335e37c
--- /dev/null
@@ -0,0 +1,13 @@
+// RUN: clang-cc -E -dD < %s | grep stdin | grep -v define
+#define A A
+/* 1
+ * 2
+ * 3
+ * 4
+ * 5
+ * 6
+ * 7
+ * 8
+ */
+#define B B
+