--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/patches/013-solaris-clang-libclangFrontend.patch Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,126 @@
+# Solaris GCC Toolchain.
+# 3.9.X upstream.
+--- tools/clang/lib/Frontend/CompilerInvocation.cpp 2016-01-12 16:01:56.000000000 -0500
++++ tools/clang/lib/Frontend/CompilerInvocation.cpp 2016-05-08 23:19:20.574431774 -0400
+@@ -1718,6 +1718,7 @@
+ Opts.EmitAllDecls = Args.hasArg(OPT_femit_all_decls);
+ Opts.PackStruct = getLastArgIntValue(Args, OPT_fpack_struct_EQ, 0, Diags);
+ Opts.MaxTypeAlign = getLastArgIntValue(Args, OPT_fmax_type_align_EQ, 0, Diags);
++ Opts.GXXABIVersion = getLastArgIntValue(Args, OPT_fabi_version_EQ, 0, Diags);
+ Opts.PICLevel = getLastArgIntValue(Args, OPT_pic_level, 0, Diags);
+ Opts.PIELevel = getLastArgIntValue(Args, OPT_pie_level, 0, Diags);
+ Opts.Static = Args.hasArg(OPT_static_define);
+--- tools/clang/lib/Frontend/InitHeaderSearch.cpp 2015-12-29 22:40:23.000000000 -0500
++++ tools/clang/lib/Frontend/InitHeaderSearch.cpp 2016-05-08 23:19:20.575431798 -0400
+@@ -118,7 +118,7 @@
+ // Add the path with sysroot prepended, if desired and this is a system header
+ // group.
+ if (HasSysroot) {
+- SmallString<256> MappedPathStorage;
++ SmallString<PATH_MAX> MappedPathStorage;
+ StringRef MappedPathStr = Path.toStringRef(MappedPathStorage);
+ if (CanPrefixSysroot(MappedPathStr)) {
+ AddUnmappedPath(IncludeSysroot + Path, Group, isFramework);
+@@ -134,7 +134,7 @@
+ assert(!Path.isTriviallyEmpty() && "can't handle empty path here");
+
+ FileManager &FM = Headers.getFileMgr();
+- SmallString<256> MappedPathStorage;
++ SmallString<PATH_MAX> MappedPathStorage;
+ StringRef MappedPathStr = Path.toStringRef(MappedPathStorage);
+
+ // Compute the DirectoryLookup type.
+@@ -183,12 +183,16 @@
+
+ // Add the multilib dirs
+ llvm::Triple::ArchType arch = triple.getArch();
+- bool is64bit = arch == llvm::Triple::ppc64 || arch == llvm::Triple::x86_64;
++ bool is64bit = arch == llvm::Triple::ppc64 || arch == llvm::Triple::x86_64 ||
++ arch == llvm::Triple::sparcv9;
+ if (is64bit)
+ AddPath(Base + "/" + ArchDir + "/" + Dir64, CXXSystem, false);
+ else
+ AddPath(Base + "/" + ArchDir + "/" + Dir32, CXXSystem, false);
+
++ // Add GCC's "C" include dir
++ AddPath(Base + "/include", CXXSystem, false);
++
+ // Add the backward dir
+ AddPath(Base + "/backward", CXXSystem, false);
+ }
+@@ -442,6 +446,7 @@
+ break; // Everything else continues to use this routine's logic.
+
+ case llvm::Triple::Linux:
++ case llvm::Triple::Solaris:
+ return;
+
+ case llvm::Triple::Win32:
+@@ -463,7 +468,7 @@
+ // Remove clang from foo/lib/clang
+ StringRef Lib = llvm::sys::path::parent_path(NoVer);
+ // Remove lib from foo/lib
+- SmallString<128> P = llvm::sys::path::parent_path(Lib);
++ SmallString<PATH_MAX> P = llvm::sys::path::parent_path(Lib);
+
+ // Get foo/include/c++/v1
+ llvm::sys::path::append(P, "include", "c++", "v1");
+--- tools/clang/lib/Frontend/InitPreprocessor.cpp 2015-11-17 17:28:55.000000000 -0500
++++ tools/clang/lib/Frontend/InitPreprocessor.cpp 2016-05-08 23:19:20.575431798 -0400
+@@ -484,17 +484,51 @@
+ Builder.defineMacro("__clang_patchlevel__", "0");
+ #endif
+ Builder.defineMacro("__clang_version__",
+- "\"" CLANG_VERSION_STRING " "
+- + getClangFullRepositoryVersion() + "\"");
++ "\"" CLANG_VERSION_STRING " " CLANG_VERSION_TAGGED_STRING "\"");
++
+ #undef TOSTR
+ #undef TOSTR2
+ if (!LangOpts.MSVCCompat) {
+ // Currently claim to be compatible with GCC 4.2.1-5621, but only if we're
+ // not compiling for MSVC compatibility
+- Builder.defineMacro("__GNUC_MINOR__", "2");
+- Builder.defineMacro("__GNUC_PATCHLEVEL__", "1");
++ if (TI.getTriple().getOS() == llvm::Triple::Solaris) {
++ Builder.defineMacro("__GNUC_MINOR__", "8");
++ Builder.defineMacro("__GNUC_PATCHLEVEL__", "0");
++ } else {
++ Builder.defineMacro("__GNUC_MINOR__", "2");
++ Builder.defineMacro("__GNUC_PATCHLEVEL__", "1");
++ }
++
+ Builder.defineMacro("__GNUC__", "4");
+- Builder.defineMacro("__GXX_ABI_VERSION", "1002");
++
++ // GCC provides a number of C++ ABI Versions in:
++ // ${top_srcdir}/gcc/c-family/c-cppbuiltin.c
++ // Currently valid GXX ABI Versions are documented here:
++ // https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html
++ // clang only supports a subset.
++ switch (LangOpts.GXXABIVersion) {
++ default:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1002");
++ break;
++ case 4:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1004");
++ break;
++ case 5:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1005");
++ break;
++ case 6:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1006");
++ break;
++ case 7:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1007");
++ break;
++ case 8:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1008");
++ break;
++ case 9:
++ Builder.defineMacro("__GXX_ABI_VERSION", "1009");
++ break;
++ }
+ }
+
+ // Define macros for the C11 / C++11 memory orderings