From c1571453de3db2b26c15cc13115fac4ece84aa7c Mon Sep 17 00:00:00 2001
From: Daniel Dunbar <daniel@zuster.org>
Date: Mon, 1 Dec 2008 18:55:22 +0000
Subject: [PATCH] Add LangOptions marker for assembler-with-cpp mode and use to
 define __ASSEMBLER__ properly. Patch from Roman Divacky (with minor
 formatting changes). Thanks!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60362 91177308-0d34-0410-b5e6-96231b3b80d8
---
 Driver/clang.cpp                  | 1 +
 include/clang/Basic/LangOptions.h | 6 ++++--
 lib/Lex/Preprocessor.cpp          | 3 ++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 34fd62fd9dc..5c89ed0776c 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -353,6 +353,7 @@ static bool InitializeLangOptions(LangOptions &Options, LangKind LK){
     PCH = true;
     break;
   case langkind_asm_cpp:
+    Options.AsmPreprocessor = 1;
     // FALLTHROUGH
   case langkind_c_cpp:
     NoPreprocess = true;
diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h
index b1bdebabc47..5cf9fc1b4bf 100644
--- a/include/clang/Basic/LangOptions.h
+++ b/include/clang/Basic/LangOptions.h
@@ -25,6 +25,7 @@ struct LangOptions {
   unsigned Trigraphs         : 1;  // Trigraphs in source files.
   unsigned BCPLComment       : 1;  // BCPL-style '//' comments.
   unsigned DollarIdents      : 1;  // '$' allowed in identifiers.
+  unsigned AsmPreprocessor   : 1;  // Preprocessor in asm mode.
   unsigned ImplicitInt       : 1;  // C89 implicit 'int'.
   unsigned Digraphs          : 1;  // C94, C99 and C++
   unsigned HexFloats         : 1;  // C99 Hexadecimal float constants.
@@ -47,7 +48,7 @@ struct LangOptions {
   unsigned NeXTRuntime       : 1; // Use NeXT runtime.
 
   unsigned ThreadsafeStatics : 1; // Whether static initializers are protected
-                                  // by lockis.
+                                  // by locks.
   unsigned Blocks            : 1; // block extension to C
 private:
   unsigned GC : 2; // Objective-C Garbage Collection modes.  We declare
@@ -58,7 +59,8 @@ public:
   enum GCMode { NonGC, GCOnly, HybridGC };
   
   LangOptions() {
-    Trigraphs = BCPLComment = DollarIdents = ImplicitInt = Digraphs = 0;
+    Trigraphs = BCPLComment = DollarIdents = AsmPreprocessor = 0;
+    ImplicitInt = Digraphs = 0;
     HexFloats = 0;
     GC = ObjC1 = ObjC2 = 0;
     C99 = Microsoft = CPlusPlus = CPlusPlus0x = NoExtensions = 0;
diff --git a/lib/Lex/Preprocessor.cpp b/lib/Lex/Preprocessor.cpp
index e9894fea4d5..00d3d56e2e8 100644
--- a/lib/Lex/Preprocessor.cpp
+++ b/lib/Lex/Preprocessor.cpp
@@ -431,7 +431,8 @@ static void InitializePredefinedMacros(Preprocessor &PP,
   // These should all be defined in the preprocessor according to the
   // current language configuration.
   DefineBuiltinMacro(Buf, "__STDC__=1");
-  //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
+  if (PP.getLangOptions().AsmPreprocessor)
+    DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
   if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
     DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
   else if (0) // STDC94 ?
-- 
GitLab