components/llvm/patches/013-solaris-clang-libclangFrontend.patch
changeset 6512 92717ce71105
child 6637 22d5f6c97e6f
--- /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