components/llvm/patches/014-solaris-clang-libclangLex.patch
changeset 6512 92717ce71105
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/patches/014-solaris-clang-libclangLex.patch	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,74 @@
+# 17867434 clang crashed in LEXER
+# 3.9.X for upstream.
+--- tools/clang/include/clang/Lex/MacroArgs.h	2015-04-11 11:58:30.000000000 -0400
++++ tools/clang/include/clang/Lex/MacroArgs.h	2016-05-08 23:19:20.554431288 -0400
+@@ -15,13 +15,13 @@
+ #define LLVM_CLANG_LEX_MACROARGS_H
+ 
+ #include "clang/Basic/LLVM.h"
++#include "clang/Lex/Token.h"
+ #include "llvm/ADT/ArrayRef.h"
+ #include <vector>
+ 
+ namespace clang {
+   class MacroInfo;
+   class Preprocessor;
+-  class Token;
+   class SourceLocation;
+ 
+ /// MacroArgs - An instance of this class captures information about
+@@ -121,6 +121,9 @@
+   /// its freelist.
+   MacroArgs *deallocate();
+ };
++static_assert(llvm::AlignOf<MacroArgs>::Alignment >=
++                  llvm::AlignOf<Token>::Alignment,
++              "Alignment is insufficient for objects appended to MacroArgs");
+ 
+ }  // end namespace clang
+ 
+--- tools/clang/include/clang/Lex/MacroInfo.h	2015-10-22 00:59:52.000000000 -0400
++++ tools/clang/include/clang/Lex/MacroInfo.h	2016-05-08 23:19:20.554431288 -0400
+@@ -295,6 +295,10 @@
+   friend class Preprocessor;
+ };
+ 
++static_assert(llvm::AlignOf<MacroInfo>::Alignment >=
++              llvm::AlignOf<unsigned>::Alignment,
++              "Alignment is insufficient for objects appended to MacroInfo");
++
+ class DefMacroDirective;
+ 
+ /// \brief Encapsulates changes to the "macros namespace" (the location where
+@@ -315,16 +319,16 @@
+   SourceLocation Loc;
+ 
+   /// \brief MacroDirective kind.
+-  unsigned MDKind : 2;
++  unsigned MDKind;
+ 
+   /// \brief True if the macro directive was loaded from a PCH file.
+-  bool IsFromPCH : 1;
++  bool IsFromPCH;
+ 
+   // Used by VisibilityMacroDirective ----------------------------------------//
+ 
+   /// \brief Whether the macro has public visibility (when described in a
+   /// module).
+-  bool IsPublic : 1;
++  bool IsPublic;
+ 
+   MacroDirective(Kind K, SourceLocation Loc)
+       : Previous(nullptr), Loc(Loc), MDKind(K), IsFromPCH(false),
+@@ -556,6 +560,10 @@
+   unsigned getNumOverridingMacros() const { return NumOverriddenBy; }
+ };
+ 
++static_assert(llvm::AlignOf<ModuleMacro>::Alignment >=
++              llvm::AlignOf<ModuleMacro *>::Alignment,
++              "Alignment is insufficient for objects appended to ModuleMacro");
++
+ /// \brief A description of the current definition of a macro.
+ ///
+ /// The definition of a macro comprises a set of (at least one) defining
+