[PATCH] D56024: [clang] [Distro] Support detecting Gentoo

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny marked an inline comment as done.
mgorny added inline comments.



Comment at: include/clang/Driver/Distro.h:118
   }
 
   bool IsUbuntu() const {

phosek wrote:
> Shall we also introduce the `IsGentoo()` predicate for convenience?
Hmm, I originally thought they only make sense when there's 1+ distro value for 
it. But I guess more distros are doing it for some reason.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56024/new/

https://reviews.llvm.org/D56024



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D39588: Distro: initial support for alpine

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny added a comment.
Herald added a subscriber: llvm-commits.

I'm sorry for being late to the party but could you update 
`unittests/Driver/DistroTest.cpp` as well?


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D39588/new/

https://reviews.llvm.org/D39588



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56024: [clang] [Distro] Support detecting Gentoo

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny updated this revision to Diff 179413.
mgorny added a comment.

Now with `IsGentoo()` predicate.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56024/new/

https://reviews.llvm.org/D56024

Files:
  include/clang/Driver/Distro.h
  lib/Driver/Distro.cpp
  unittests/Driver/DistroTest.cpp

Index: unittests/Driver/DistroTest.cpp
===
--- unittests/Driver/DistroTest.cpp
+++ unittests/Driver/DistroTest.cpp
@@ -51,6 +51,7 @@
   ASSERT_FALSE(UbuntuTrusty.IsRedhat());
   ASSERT_FALSE(UbuntuTrusty.IsOpenSUSE());
   ASSERT_FALSE(UbuntuTrusty.IsDebian());
+  ASSERT_FALSE(UbuntuTrusty.IsGentoo());
 
   llvm::vfs::InMemoryFileSystem UbuntuYakketyFileSystem;
   UbuntuYakketyFileSystem.addFile("/etc/debian_version", 0,
@@ -80,6 +81,7 @@
   ASSERT_FALSE(UbuntuYakkety.IsRedhat());
   ASSERT_FALSE(UbuntuYakkety.IsOpenSUSE());
   ASSERT_FALSE(UbuntuYakkety.IsDebian());
+  ASSERT_FALSE(UbuntuYakkety.IsGentoo());
 }
 
 TEST(DistroTest, DetectRedhat) {
@@ -114,6 +116,7 @@
   ASSERT_TRUE(Fedora25.IsRedhat());
   ASSERT_FALSE(Fedora25.IsOpenSUSE());
   ASSERT_FALSE(Fedora25.IsDebian());
+  ASSERT_FALSE(Fedora25.IsGentoo());
 
   llvm::vfs::InMemoryFileSystem CentOS7FileSystem;
   CentOS7FileSystem.addFile("/etc/system-release-cpe", 0,
@@ -150,6 +153,7 @@
   ASSERT_TRUE(CentOS7.IsRedhat());
   ASSERT_FALSE(CentOS7.IsOpenSUSE());
   ASSERT_FALSE(CentOS7.IsDebian());
+  ASSERT_FALSE(CentOS7.IsGentoo());
 }
 
 TEST(DistroTest, DetectOpenSUSE) {
@@ -177,6 +181,7 @@
   ASSERT_FALSE(OpenSUSELeap421.IsRedhat());
   ASSERT_TRUE(OpenSUSELeap421.IsOpenSUSE());
   ASSERT_FALSE(OpenSUSELeap421.IsDebian());
+  ASSERT_FALSE(OpenSUSELeap421.IsGentoo());
 
   llvm::vfs::InMemoryFileSystem OpenSUSE132FileSystem;
   OpenSUSE132FileSystem.addFile("/etc/SuSE-release", 0,
@@ -202,6 +207,7 @@
   ASSERT_FALSE(OpenSUSE132.IsRedhat());
   ASSERT_TRUE(OpenSUSE132.IsOpenSUSE());
   ASSERT_FALSE(OpenSUSE132.IsDebian());
+  ASSERT_FALSE(OpenSUSE132.IsGentoo());
 
   llvm::vfs::InMemoryFileSystem SLES10FileSystem;
   SLES10FileSystem.addFile("/etc/SuSE-release", 0,
@@ -218,6 +224,7 @@
   ASSERT_FALSE(SLES10.IsRedhat());
   ASSERT_FALSE(SLES10.IsOpenSUSE());
   ASSERT_FALSE(SLES10.IsDebian());
+  ASSERT_FALSE(SLES10.IsGentoo());
 }
 
 TEST(DistroTest, DetectDebian) {
@@ -240,6 +247,7 @@
   ASSERT_FALSE(DebianJessie.IsRedhat());
   ASSERT_FALSE(DebianJessie.IsOpenSUSE());
   ASSERT_TRUE(DebianJessie.IsDebian());
+  ASSERT_FALSE(DebianJessie.IsGentoo());
 
   llvm::vfs::InMemoryFileSystem DebianStretchSidFileSystem;
   DebianStretchSidFileSystem.addFile("/etc/debian_version", 0,
@@ -258,6 +266,7 @@
   ASSERT_FALSE(DebianStretchSid.IsRedhat());
   ASSERT_FALSE(DebianStretchSid.IsOpenSUSE());
   ASSERT_TRUE(DebianStretchSid.IsDebian());
+  ASSERT_FALSE(DebianStretchSid.IsGentoo());
 }
 
 TEST(DistroTest, DetectExherbo) {
@@ -279,6 +288,7 @@
   ASSERT_FALSE(Exherbo.IsRedhat());
   ASSERT_FALSE(Exherbo.IsOpenSUSE());
   ASSERT_FALSE(Exherbo.IsDebian());
+  ASSERT_FALSE(Exherbo.IsGentoo());
 }
 
 TEST(DistroTest, DetectArchLinux) {
@@ -300,6 +310,32 @@
   ASSERT_FALSE(ArchLinux.IsRedhat());
   ASSERT_FALSE(ArchLinux.IsOpenSUSE());
   ASSERT_FALSE(ArchLinux.IsDebian());
+  ASSERT_FALSE(ArchLinux.IsGentoo());
+}
+
+TEST(DistroTest, DetectGentoo) {
+  llvm::vfs::InMemoryFileSystem GentooFileSystem;
+  GentooFileSystem.addFile(
+  "/etc/gentoo-release", 0,
+  llvm::MemoryBuffer::getMemBuffer("Gentoo Base System release 2.6"));
+  GentooFileSystem.addFile(
+  "/etc/os-release", 0,
+  llvm::MemoryBuffer::getMemBuffer(
+  "NAME=Gentoo\n"
+  "ID=gentoo\n"
+  "PRETTY_NAME=\"Gentoo/Linux\"\n"
+  "ANSI_COLOR=\"1;32\"\n"
+  "HOME_URL=\"https://www.gentoo.org/\"\n";
+  "SUPPORT_URL=\"https://www.gentoo.org/support/\"\n";
+  "BUG_REPORT_URL=\"https://bugs.gentoo.org/\"\n";));
+
+  Distro Gentoo{GentooFileSystem};
+  ASSERT_EQ(Distro(Distro::Gentoo), Gentoo);
+  ASSERT_FALSE(Gentoo.IsUbuntu());
+  ASSERT_FALSE(Gentoo.IsRedhat());
+  ASSERT_FALSE(Gentoo.IsOpenSUSE());
+  ASSERT_FALSE(Gentoo.IsDebian());
+  ASSERT_TRUE(Gentoo.IsGentoo());
 }
 
 } // end anonymous namespace
Index: lib/Driver/Distro.cpp
===
--- lib/Driver/Distro.cpp
+++ lib/Driver/Distro.cpp
@@ -138,6 +138,9 @@
   if (VFS.exists("/etc/arch-release"))
 return Distro::ArchLinux;
 
+  if (VFS.exists("/etc/gentoo-release"))
+return Distro::Gentoo;
+
   return Distro::UnknownDistro;
 }
 
Index: include/clang/Driver/Distro.h
===
--- include/clang/Driver/Distro.h
+++ include/clang/Driver/Distro.h
@@ -39,6 +39,7 @@
 RHEL6,
 RHEL7,
 Fedora,
+Gentoo,
 OpenSUSE,
 UbuntuHardy,
 UbuntuIntrepid,
@@ -123,6 +124,10 @@
 return DistroVal == AlpineLinux;
   }
 
+  bool IsGentoo() const {
+return DistroVal == Gentoo;
+  }
+
 

[PATCH] D56000: [compiler-rt] [xray] Disable alignas() for thread_local objects on NetBSD

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny marked an inline comment as done.
mgorny added inline comments.



Comment at: lib/xray/xray_defs.h:22
 
+#if !SANITIZER_NETBSD
+#define XRAY_TLS_ALIGNAS(x) alignas(x)

dberris wrote:
> krytarowski wrote:
> > I would switch the order, in order to remove unneeded negation.
> > 
> > ```
> > #if SANITIZER_NETBSD
> > ...
> > #else
> > ...
> > #endif
> > ```
> > 
> > `#define XRAY_HAS_TLS_ALIGNAS 0` is not needed as `#if 
> > XRAY_HAS_TLS_ALIGNAS` will evaluate to false anyway and `#define 
> > XRAY_HAS_TLS_ALIGNAS 1` is equivalent to `#define XRAY_HAS_TLS_ALIGNAS`. 
> > But it's just a matter of style.
> FWIW, I agree to this suggestion. I also prefer:
> 
> ```
> #if SANITIZER_NETBSD
> ...
> #else
> ...
> ```
> 
> But I do like the explicit definition of `XRAY_HAS_TLS_ALIGNAS`.
I've chosen the explicit method to match what's already done e.g. in 
`sanitizer_platform.h`. I'll swap the order.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56000/new/

https://reviews.llvm.org/D56000



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56000: [compiler-rt] [xray] Disable alignas() for thread_local objects on NetBSD

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny updated this revision to Diff 179414.
mgorny marked 2 inline comments as done.
mgorny added a comment.

Reordered.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56000/new/

https://reviews.llvm.org/D56000

Files:
  lib/xray/xray_basic_logging.cc
  lib/xray/xray_defs.h
  lib/xray/xray_fdr_logging.cc


Index: lib/xray/xray_fdr_logging.cc
===
--- lib/xray/xray_fdr_logging.cc
+++ lib/xray/xray_fdr_logging.cc
@@ -51,7 +51,7 @@
 // call so that it can be initialized on first use instead of as a global. We
 // force the alignment to 64-bytes for x86 cache line alignment, as this
 // structure is used in the hot path of implementation.
-struct alignas(64) ThreadLocalData {
+struct XRAY_TLS_ALIGNAS(64) ThreadLocalData {
   BufferQueue::Buffer Buffer{};
   BufferQueue *BQ = nullptr;
 
@@ -124,8 +124,10 @@
 // critical section, calling a function that might be XRay instrumented (and
 // thus in turn calling into malloc by virtue of registration of the
 // thread_local's destructor).
+#if XRAY_HAS_TLS_ALIGNAS
 static_assert(alignof(ThreadLocalData) >= 64,
   "ThreadLocalData must be cache line aligned.");
+#endif
 static ThreadLocalData &getThreadLocalData() {
   thread_local typename std::aligned_storage<
   sizeof(ThreadLocalData), alignof(ThreadLocalData)>::type TLDStorage{};
Index: lib/xray/xray_defs.h
===
--- lib/xray/xray_defs.h
+++ lib/xray/xray_defs.h
@@ -19,4 +19,14 @@
 #define XRAY_NEVER_INSTRUMENT
 #endif
 
+#if SANITIZER_NETBSD
+// NetBSD: thread_local is not aligned properly, and the code relying
+// on it segfaults
+#define XRAY_TLS_ALIGNAS(x)
+#define XRAY_HAS_TLS_ALIGNAS 0
+#else
+#define XRAY_TLS_ALIGNAS(x) alignas(x)
+#define XRAY_HAS_TLS_ALIGNAS 1
+#endif
+
 #endif  // XRAY_XRAY_DEFS_H
Index: lib/xray/xray_basic_logging.cc
===
--- lib/xray/xray_basic_logging.cc
+++ lib/xray/xray_basic_logging.cc
@@ -55,7 +55,7 @@
 
 static_assert(sizeof(StackEntry) == 16, "Wrong size for StackEntry");
 
-struct alignas(64) ThreadLocalData {
+struct XRAY_TLS_ALIGNAS(64) ThreadLocalData {
   void *InMemoryBuffer = nullptr;
   size_t BufferSize = 0;
   size_t BufferOffset = 0;


Index: lib/xray/xray_fdr_logging.cc
===
--- lib/xray/xray_fdr_logging.cc
+++ lib/xray/xray_fdr_logging.cc
@@ -51,7 +51,7 @@
 // call so that it can be initialized on first use instead of as a global. We
 // force the alignment to 64-bytes for x86 cache line alignment, as this
 // structure is used in the hot path of implementation.
-struct alignas(64) ThreadLocalData {
+struct XRAY_TLS_ALIGNAS(64) ThreadLocalData {
   BufferQueue::Buffer Buffer{};
   BufferQueue *BQ = nullptr;
 
@@ -124,8 +124,10 @@
 // critical section, calling a function that might be XRay instrumented (and
 // thus in turn calling into malloc by virtue of registration of the
 // thread_local's destructor).
+#if XRAY_HAS_TLS_ALIGNAS
 static_assert(alignof(ThreadLocalData) >= 64,
   "ThreadLocalData must be cache line aligned.");
+#endif
 static ThreadLocalData &getThreadLocalData() {
   thread_local typename std::aligned_storage<
   sizeof(ThreadLocalData), alignof(ThreadLocalData)>::type TLDStorage{};
Index: lib/xray/xray_defs.h
===
--- lib/xray/xray_defs.h
+++ lib/xray/xray_defs.h
@@ -19,4 +19,14 @@
 #define XRAY_NEVER_INSTRUMENT
 #endif
 
+#if SANITIZER_NETBSD
+// NetBSD: thread_local is not aligned properly, and the code relying
+// on it segfaults
+#define XRAY_TLS_ALIGNAS(x)
+#define XRAY_HAS_TLS_ALIGNAS 0
+#else
+#define XRAY_TLS_ALIGNAS(x) alignas(x)
+#define XRAY_HAS_TLS_ALIGNAS 1
+#endif
+
 #endif  // XRAY_XRAY_DEFS_H
Index: lib/xray/xray_basic_logging.cc
===
--- lib/xray/xray_basic_logging.cc
+++ lib/xray/xray_basic_logging.cc
@@ -55,7 +55,7 @@
 
 static_assert(sizeof(StackEntry) == 16, "Wrong size for StackEntry");
 
-struct alignas(64) ThreadLocalData {
+struct XRAY_TLS_ALIGNAS(64) ThreadLocalData {
   void *InMemoryBuffer = nullptr;
   size_t BufferSize = 0;
   size_t BufferOffset = 0;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56047: [Driver] Disable -faddrsig on Gentoo by default

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny created this revision.
mgorny added reviewers: pcc, dyung, phosek.

Gentoo supports combining clang toolchain with GNU binutils, and many
users actually do that.  As -faddrsig is not supported by GNU strip,
this results in a lot of warnings.  Disable it by default and let users
enable it explicitly if they want it; with the intent of reevaluating
when the underlying feature becomes standarized.


Repository:
  rC Clang

https://reviews.llvm.org/D56047

Files:
  lib/Driver/ToolChains/Clang.cpp
  test/Driver/addrsig.c
  test/lit.cfg.py


Index: test/lit.cfg.py
===
--- test/lit.cfg.py
+++ test/lit.cfg.py
@@ -190,3 +190,6 @@
 macOSSDKVersion = lit.util.findPlatformSdkVersionOnMacOS(config, lit_config)
 if macOSSDKVersion is not None:
 config.available_features.add('macos-sdk-' + macOSSDKVersion)
+
+if os.path.exists('/etc/gentoo-release'):
+config.available_features.add('gentoo')
Index: test/Driver/addrsig.c
===
--- test/Driver/addrsig.c
+++ test/Driver/addrsig.c
@@ -1,3 +1,6 @@
+// Gentoo disables -faddrsig by default
+// XFAIL: gentoo
+
 // RUN: %clang -### -target x86_64-unknown-linux -c %s 2>&1 | FileCheck 
-check-prefix=ADDRSIG %s
 // RUN: %clang -### -target x86_64-pc-win32 -c %s 2>&1 | FileCheck 
-check-prefix=ADDRSIG %s
 // RUN: %clang -### -target x86_64-unknown-linux -fno-integrated-as -c %s 2>&1 
| FileCheck -check-prefix=NO-ADDRSIG %s
Index: lib/Driver/ToolChains/Clang.cpp
===
--- lib/Driver/ToolChains/Clang.cpp
+++ lib/Driver/ToolChains/Clang.cpp
@@ -25,6 +25,7 @@
 #include "clang/Basic/LangOptions.h"
 #include "clang/Basic/ObjCRuntime.h"
 #include "clang/Basic/Version.h"
+#include "clang/Driver/Distro.h"
 #include "clang/Driver/DriverDiagnostic.h"
 #include "clang/Driver/Options.h"
 #include "clang/Driver/SanitizerArgs.h"
@@ -5290,6 +5291,7 @@
 TC.getTriple().isOSBinFormatCOFF()) &&
   !TC.getTriple().isPS4() &&
   !TC.getTriple().isOSNetBSD() &&
+  !Distro(D.getVFS()).IsGentoo() &&
TC.useIntegratedAs()))
 CmdArgs.push_back("-faddrsig");
 


Index: test/lit.cfg.py
===
--- test/lit.cfg.py
+++ test/lit.cfg.py
@@ -190,3 +190,6 @@
 macOSSDKVersion = lit.util.findPlatformSdkVersionOnMacOS(config, lit_config)
 if macOSSDKVersion is not None:
 config.available_features.add('macos-sdk-' + macOSSDKVersion)
+
+if os.path.exists('/etc/gentoo-release'):
+config.available_features.add('gentoo')
Index: test/Driver/addrsig.c
===
--- test/Driver/addrsig.c
+++ test/Driver/addrsig.c
@@ -1,3 +1,6 @@
+// Gentoo disables -faddrsig by default
+// XFAIL: gentoo
+
 // RUN: %clang -### -target x86_64-unknown-linux -c %s 2>&1 | FileCheck -check-prefix=ADDRSIG %s
 // RUN: %clang -### -target x86_64-pc-win32 -c %s 2>&1 | FileCheck -check-prefix=ADDRSIG %s
 // RUN: %clang -### -target x86_64-unknown-linux -fno-integrated-as -c %s 2>&1 | FileCheck -check-prefix=NO-ADDRSIG %s
Index: lib/Driver/ToolChains/Clang.cpp
===
--- lib/Driver/ToolChains/Clang.cpp
+++ lib/Driver/ToolChains/Clang.cpp
@@ -25,6 +25,7 @@
 #include "clang/Basic/LangOptions.h"
 #include "clang/Basic/ObjCRuntime.h"
 #include "clang/Basic/Version.h"
+#include "clang/Driver/Distro.h"
 #include "clang/Driver/DriverDiagnostic.h"
 #include "clang/Driver/Options.h"
 #include "clang/Driver/SanitizerArgs.h"
@@ -5290,6 +5291,7 @@
 TC.getTriple().isOSBinFormatCOFF()) &&
   !TC.getTriple().isPS4() &&
   !TC.getTriple().isOSNetBSD() &&
+  !Distro(D.getVFS()).IsGentoo() &&
TC.useIntegratedAs()))
 CmdArgs.push_back("-faddrsig");
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56049: [compiler-rt] [xray] Detect MPROTECT and error out when it's enabled (on NetBSD)

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny created this revision.
mgorny added reviewers: krytarowski, dberris.
Herald added subscribers: Sanitizers, llvm-commits, kubamracek.

Add a CheckMPROTECT() routine to detect when pax MPROTECT is enabled
on NetBSD, and error xray out when it is.  The solution is adapted
from existing CheckASLR().


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D56049

Files:
  lib/sanitizer_common/sanitizer_common.h
  lib/sanitizer_common/sanitizer_fuchsia.cc
  lib/sanitizer_common/sanitizer_linux.cc
  lib/sanitizer_common/sanitizer_mac.cc
  lib/sanitizer_common/sanitizer_rtems.cc
  lib/sanitizer_common/sanitizer_win.cc
  lib/xray/xray_init.cc

Index: lib/xray/xray_init.cc
===
--- lib/xray/xray_init.cc
+++ lib/xray/xray_init.cc
@@ -67,6 +67,9 @@
   if (atomic_load(&XRayInitialized, memory_order_acquire))
 return;
 
+  // XRAY is not compatible with pax MPROTECT
+  CheckMPROTECT();
+
   if (!atomic_load(&XRayFlagsInitialized, memory_order_acquire)) {
 initializeFlags();
 atomic_store(&XRayFlagsInitialized, true, memory_order_release);
Index: lib/sanitizer_common/sanitizer_win.cc
===
--- lib/sanitizer_common/sanitizer_win.cc
+++ lib/sanitizer_common/sanitizer_win.cc
@@ -1016,6 +1016,10 @@
   // Do nothing
 }
 
+void CheckMPROTECT() {
+  // Do nothing
+}
+
 char **GetArgv() {
   // FIXME: Actually implement this function.
   return 0;
Index: lib/sanitizer_common/sanitizer_rtems.cc
===
--- lib/sanitizer_common/sanitizer_rtems.cc
+++ lib/sanitizer_common/sanitizer_rtems.cc
@@ -98,6 +98,7 @@
 void InitializePlatformEarly() {}
 void MaybeReexec() {}
 void CheckASLR() {}
+void CheckMPROTECT() {}
 void DisableCoreDumperIfNecessary() {}
 void InstallDeadlySignalHandlers(SignalHandlerType handler) {}
 void SetAlternateSignalStack() {}
Index: lib/sanitizer_common/sanitizer_mac.cc
===
--- lib/sanitizer_common/sanitizer_mac.cc
+++ lib/sanitizer_common/sanitizer_mac.cc
@@ -377,6 +377,10 @@
   // Do nothing
 }
 
+void CheckMPROTECT() {
+  // Do nothing
+}
+
 uptr GetPageSize() {
   return sysconf(_SC_PAGESIZE);
 }
Index: lib/sanitizer_common/sanitizer_linux.cc
===
--- lib/sanitizer_common/sanitizer_linux.cc
+++ lib/sanitizer_common/sanitizer_linux.cc
@@ -2023,6 +2023,30 @@
 #endif
 }
 
+void CheckMPROTECT() {
+#if SANITIZER_NETBSD
+  int mib[3];
+  int paxflags;
+  uptr len = sizeof(paxflags);
+
+  mib[0] = CTL_PROC;
+  mib[1] = internal_getpid();
+  mib[2] = PROC_PID_PAXFLAGS;
+
+  if (UNLIKELY(internal_sysctl(mib, 3, &paxflags, &len, NULL, 0) == -1)) {
+Printf("sysctl failed\n");
+Die();
+  }
+
+  if (UNLIKELY(paxflags & CTL_PROC_PAXFLAGS_MPROTECT)) {
+Printf("This sanitizer is not compatible with enabled MPROTECT\n");
+Die();
+  }
+#else
+  // Do nothing
+#endif
+}
+
 void PrintModuleMap() { }
 
 void CheckNoDeepBind(const char *filename, int flag) {
Index: lib/sanitizer_common/sanitizer_fuchsia.cc
===
--- lib/sanitizer_common/sanitizer_fuchsia.cc
+++ lib/sanitizer_common/sanitizer_fuchsia.cc
@@ -89,6 +89,7 @@
 void InitializePlatformEarly() {}
 void MaybeReexec() {}
 void CheckASLR() {}
+void CheckMPROTECT() {}
 void PlatformPrepareForSandboxing(__sanitizer_sandbox_arguments *args) {}
 void DisableCoreDumperIfNecessary() {}
 void InstallDeadlySignalHandlers(SignalHandlerType handler) {}
Index: lib/sanitizer_common/sanitizer_common.h
===
--- lib/sanitizer_common/sanitizer_common.h
+++ lib/sanitizer_common/sanitizer_common.h
@@ -223,6 +223,7 @@
 u32 GetUid();
 void ReExec();
 void CheckASLR();
+void CheckMPROTECT();
 char **GetArgv();
 char **GetEnviron();
 void PrintCmdline();
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56049: [compiler-rt] [xray] Detect MPROTECT and error out when it's enabled (on NetBSD)

2018-12-22 Thread Kamil Rytarowski via Phabricator via cfe-commits
krytarowski accepted this revision.
krytarowski added inline comments.
This revision is now accepted and ready to land.



Comment at: lib/xray/xray_init.cc:70
 
+  // XRAY is not compatible with pax MPROTECT
+  CheckMPROTECT();

PaX


Repository:
  rCRT Compiler Runtime

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56049/new/

https://reviews.llvm.org/D56049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56050: [Sema] Diagnose array access preceding the array bounds even when the base type is incomplete.

2018-12-22 Thread Bruno Ricci via Phabricator via cfe-commits
riccibruno created this revision.
riccibruno added a reviewer: efriedma.
riccibruno added a project: clang.
Herald added a subscriber: cfe-commits.

When the type of the base expression after `IgnoreParenCasts` is incomplete,
it is still possible to diagnose an array access which precedes the array 
bounds.

This is a follow-up on D55862  which added an 
early return when the type of
the base expression after `IgnoreParenCasts` was incomplete.


Repository:
  rC Clang

https://reviews.llvm.org/D56050

Files:
  lib/Sema/SemaChecking.cpp
  test/SemaCXX/array-bounds.cpp


Index: test/SemaCXX/array-bounds.cpp
===
--- test/SemaCXX/array-bounds.cpp
+++ test/SemaCXX/array-bounds.cpp
@@ -287,9 +287,12 @@
 
 namespace PR39746 {
   struct S;
-  extern S xxx[2];
+  extern S xxx[2]; // expected-note {{array 'xxx' declared here}}
   class C {};
 
   C &f() { return reinterpret_cast(xxx)[1]; } // no-warning
+  // We have no info on whether this is out-of-bounds.
   C &g() { return reinterpret_cast(xxx)[2]; } // no-warning
+  // We can still diagnose this.
+  C &h() { return reinterpret_cast(xxx)[-1]; } // expected-warning 
{{array index -1 is before the beginning of the array}}
 }
Index: lib/Sema/SemaChecking.cpp
===
--- lib/Sema/SemaChecking.cpp
+++ lib/Sema/SemaChecking.cpp
@@ -12383,12 +12383,6 @@
 return;
 
   const Type *BaseType = ArrayTy->getElementType().getTypePtr();
-  // It is possible that the type of the base expression after IgnoreParenCasts
-  // is incomplete, even though the type of the base expression before
-  // IgnoreParenCasts is complete (see PR39746 for an example). In this case we
-  // have no information about whether the array access is out-of-bounds.
-  if (BaseType->isIncompleteType())
-return;
 
   Expr::EvalResult Result;
   if (!IndexExpr->EvaluateAsInt(Result, Context, Expr::SE_AllowSideEffects))
@@ -12405,6 +12399,15 @@
 ND = ME->getMemberDecl();
 
   if (index.isUnsigned() || !index.isNegative()) {
+// It is possible that the type of the base expression after
+// IgnoreParenCasts is incomplete, even though the type of the base
+// expression before IgnoreParenCasts is complete (see PR39746 for an
+// example). In this case we have no information about whether the array
+// access exceeds the array bounds. However we can still diagnose an array
+// access which precedes the array bounds.
+if (BaseType->isIncompleteType())
+  return;
+
 llvm::APInt size = ArrayTy->getSize();
 if (!size.isStrictlyPositive())
   return;


Index: test/SemaCXX/array-bounds.cpp
===
--- test/SemaCXX/array-bounds.cpp
+++ test/SemaCXX/array-bounds.cpp
@@ -287,9 +287,12 @@
 
 namespace PR39746 {
   struct S;
-  extern S xxx[2];
+  extern S xxx[2]; // expected-note {{array 'xxx' declared here}}
   class C {};
 
   C &f() { return reinterpret_cast(xxx)[1]; } // no-warning
+  // We have no info on whether this is out-of-bounds.
   C &g() { return reinterpret_cast(xxx)[2]; } // no-warning
+  // We can still diagnose this.
+  C &h() { return reinterpret_cast(xxx)[-1]; } // expected-warning {{array index -1 is before the beginning of the array}}
 }
Index: lib/Sema/SemaChecking.cpp
===
--- lib/Sema/SemaChecking.cpp
+++ lib/Sema/SemaChecking.cpp
@@ -12383,12 +12383,6 @@
 return;
 
   const Type *BaseType = ArrayTy->getElementType().getTypePtr();
-  // It is possible that the type of the base expression after IgnoreParenCasts
-  // is incomplete, even though the type of the base expression before
-  // IgnoreParenCasts is complete (see PR39746 for an example). In this case we
-  // have no information about whether the array access is out-of-bounds.
-  if (BaseType->isIncompleteType())
-return;
 
   Expr::EvalResult Result;
   if (!IndexExpr->EvaluateAsInt(Result, Context, Expr::SE_AllowSideEffects))
@@ -12405,6 +12399,15 @@
 ND = ME->getMemberDecl();
 
   if (index.isUnsigned() || !index.isNegative()) {
+// It is possible that the type of the base expression after
+// IgnoreParenCasts is incomplete, even though the type of the base
+// expression before IgnoreParenCasts is complete (see PR39746 for an
+// example). In this case we have no information about whether the array
+// access exceeds the array bounds. However we can still diagnose an array
+// access which precedes the array bounds.
+if (BaseType->isIncompleteType())
+  return;
+
 llvm::APInt size = ArrayTy->getSize();
 if (!size.isStrictlyPositive())
   return;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r350003 - [AST] Store the arguments of CXXConstructExpr in a trailing array

2018-12-22 Thread Bruno Ricci via cfe-commits
Author: brunoricci
Date: Sat Dec 22 06:39:30 2018
New Revision: 350003

URL: http://llvm.org/viewvc/llvm-project?rev=350003&view=rev
Log:
[AST] Store the arguments of CXXConstructExpr in a trailing array

Store the arguments of CXXConstructExpr in a trailing array. This is very
similar to the CallExpr case in D55771, with the exception that there is
only one derived class (CXXTemporaryObjectExpr) and that we compute the
offset to the trailing array instead of storing it.

This saves one pointer per CXXConstructExpr and CXXTemporaryObjectExpr.

Reviewed By: rjmccall

Differential Revision: https://reviews.llvm.org/D56022


Modified:
cfe/trunk/include/clang/AST/ExprCXX.h
cfe/trunk/include/clang/AST/Stmt.h
cfe/trunk/lib/AST/ASTImporter.cpp
cfe/trunk/lib/AST/ExprCXX.cpp
cfe/trunk/lib/Sema/SemaInit.cpp
cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
cfe/trunk/lib/Serialization/ASTWriterStmt.cpp

Modified: cfe/trunk/include/clang/AST/ExprCXX.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprCXX.h?rev=350003&r1=350002&r2=350003&view=diff
==
--- cfe/trunk/include/clang/AST/ExprCXX.h (original)
+++ cfe/trunk/include/clang/AST/ExprCXX.h Sat Dec 22 06:39:30 2018
@@ -1280,6 +1280,8 @@ public:
 
 /// Represents a call to a C++ constructor.
 class CXXConstructExpr : public Expr {
+  friend class ASTStmtReader;
+
 public:
   enum ConstructionKind {
 CK_Complete,
@@ -1289,98 +1291,119 @@ public:
   };
 
 private:
-  CXXConstructorDecl *Constructor = nullptr;
-  SourceLocation Loc;
+  /// A pointer to the constructor which will be ultimately called.
+  CXXConstructorDecl *Constructor;
+
   SourceRange ParenOrBraceRange;
-  unsigned NumArgs : 16;
-  unsigned Elidable : 1;
-  unsigned HadMultipleCandidates : 1;
-  unsigned ListInitialization : 1;
-  unsigned StdInitListInitialization : 1;
-  unsigned ZeroInitialization : 1;
-  unsigned ConstructKind : 2;
-  Stmt **Args = nullptr;
 
-  void setConstructor(CXXConstructorDecl *C) { Constructor = C; }
+  /// The number of arguments.
+  unsigned NumArgs;
+
+  // We would like to stash the arguments of the constructor call after
+  // CXXConstructExpr. However CXXConstructExpr is used as a base class of
+  // CXXTemporaryObjectExpr which makes the use of llvm::TrailingObjects
+  // impossible.
+  //
+  // Instead we manually stash the trailing object after the full object
+  // containing CXXConstructExpr (that is either CXXConstructExpr or
+  // CXXTemporaryObjectExpr).
+  //
+  // The trailing objects are:
+  //
+  // * An array of getNumArgs() "Stmt *" for the arguments of the
+  //   constructor call.
+
+  /// Return a pointer to the start of the trailing arguments.
+  /// Defined just after CXXTemporaryObjectExpr.
+  inline Stmt **getTrailingArgs();
+  const Stmt *const *getTrailingArgs() const {
+return const_cast(this)->getTrailingArgs();
+  }
 
 protected:
-  CXXConstructExpr(const ASTContext &C, StmtClass SC, QualType T,
-   SourceLocation Loc,
-   CXXConstructorDecl *Ctor,
-   bool Elidable,
-   ArrayRef Args,
-   bool HadMultipleCandidates,
-   bool ListInitialization,
-   bool StdInitListInitialization,
-   bool ZeroInitialization,
-   ConstructionKind ConstructKind,
+  /// Build a C++ construction expression.
+  CXXConstructExpr(StmtClass SC, QualType Ty, SourceLocation Loc,
+   CXXConstructorDecl *Ctor, bool Elidable,
+   ArrayRef Args, bool HadMultipleCandidates,
+   bool ListInitialization, bool StdInitListInitialization,
+   bool ZeroInitialization, ConstructionKind ConstructKind,
SourceRange ParenOrBraceRange);
 
-  /// Construct an empty C++ construction expression.
-  CXXConstructExpr(StmtClass SC, EmptyShell Empty)
-  : Expr(SC, Empty), NumArgs(0), Elidable(false),
-HadMultipleCandidates(false), ListInitialization(false),
-ZeroInitialization(false), ConstructKind(0) {}
+  /// Build an empty C++ construction expression.
+  CXXConstructExpr(StmtClass SC, EmptyShell Empty, unsigned NumArgs);
+
+  /// Return the size in bytes of the trailing objects. Used by
+  /// CXXTemporaryObjectExpr to allocate the right amount of storage.
+  static unsigned sizeOfTrailingObjects(unsigned NumArgs) {
+return NumArgs * sizeof(Stmt *);
+  }
 
 public:
-  friend class ASTStmtReader;
+  /// Create a C++ construction expression.
+  static CXXConstructExpr *
+  Create(const ASTContext &Ctx, QualType Ty, SourceLocation Loc,
+ CXXConstructorDecl *Ctor, bool Elidable, ArrayRef Args,
+ bool HadMultipleCandidates, bool ListInitialization,
+ bool StdInitListInitialization, bool ZeroInitialization,
+ ConstructionKind ConstructKind, SourceRange ParenOrBraceRange);
 
-  /// Const

[PATCH] D56022: [AST] Store the arguments of CXXConstructExpr in a trailing array

2018-12-22 Thread Phabricator via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL350003: [AST] Store the arguments of CXXConstructExpr in a 
trailing array (authored by brunoricci, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D56022?vs=179337&id=179424#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56022/new/

https://reviews.llvm.org/D56022

Files:
  cfe/trunk/include/clang/AST/ExprCXX.h
  cfe/trunk/include/clang/AST/Stmt.h
  cfe/trunk/lib/AST/ASTImporter.cpp
  cfe/trunk/lib/AST/ExprCXX.cpp
  cfe/trunk/lib/Sema/SemaInit.cpp
  cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
  cfe/trunk/lib/Serialization/ASTWriterStmt.cpp

Index: cfe/trunk/lib/AST/ASTImporter.cpp
===
--- cfe/trunk/lib/AST/ASTImporter.cpp
+++ cfe/trunk/lib/AST/ASTImporter.cpp
@@ -6816,7 +6816,7 @@
   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
 return std::move(Err);
 
-  return new (Importer.getToContext()) CXXTemporaryObjectExpr(
+  return CXXTemporaryObjectExpr::Create(
   Importer.getToContext(), ToConstructor, ToType, ToTypeSourceInfo, ToArgs,
   ToParenOrBraceRange, E->hadMultipleCandidates(),
   E->isListInitialization(), E->isStdInitListInitialization(),
Index: cfe/trunk/lib/AST/ExprCXX.cpp
===
--- cfe/trunk/lib/AST/ExprCXX.cpp
+++ cfe/trunk/lib/AST/ExprCXX.cpp
@@ -453,7 +453,7 @@
 SourceLocation CXXConstructExpr::getBeginLoc() const {
   if (isa(this))
 return cast(this)->getBeginLoc();
-  return Loc;
+  return getLocation();
 }
 
 SourceLocation CXXConstructExpr::getEndLoc() const {
@@ -463,7 +463,7 @@
   if (ParenOrBraceRange.isValid())
 return ParenOrBraceRange.getEnd();
 
-  SourceLocation End = Loc;
+  SourceLocation End = getLocation();
   for (unsigned I = getNumArgs(); I > 0; --I) {
 const Expr *Arg = getArg(I-1);
 if (!Arg->isDefaultArgument()) {
@@ -892,25 +892,47 @@
   return new (C) CXXBindTemporaryExpr(Temp, SubExpr);
 }
 
-CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(const ASTContext &C,
-   CXXConstructorDecl *Cons,
-   QualType Type,
-   TypeSourceInfo *TSI,
-   ArrayRef Args,
-   SourceRange ParenOrBraceRange,
-   bool HadMultipleCandidates,
-   bool ListInitialization,
-   bool StdInitListInitialization,
-   bool ZeroInitialization)
-: CXXConstructExpr(C, CXXTemporaryObjectExprClass, Type,
-   TSI->getTypeLoc().getBeginLoc(), Cons, false, Args,
-   HadMultipleCandidates, ListInitialization,
-   StdInitListInitialization,  ZeroInitialization,
-   CXXConstructExpr::CK_Complete, ParenOrBraceRange),
-  Type(TSI) {}
+CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(
+CXXConstructorDecl *Cons, QualType Ty, TypeSourceInfo *TSI,
+ArrayRef Args, SourceRange ParenOrBraceRange,
+bool HadMultipleCandidates, bool ListInitialization,
+bool StdInitListInitialization, bool ZeroInitialization)
+: CXXConstructExpr(
+  CXXTemporaryObjectExprClass, Ty, TSI->getTypeLoc().getBeginLoc(),
+  Cons, /* Elidable=*/false, Args, HadMultipleCandidates,
+  ListInitialization, StdInitListInitialization, ZeroInitialization,
+  CXXConstructExpr::CK_Complete, ParenOrBraceRange),
+  TSI(TSI) {}
+
+CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(EmptyShell Empty,
+   unsigned NumArgs)
+: CXXConstructExpr(CXXTemporaryObjectExprClass, Empty, NumArgs) {}
+
+CXXTemporaryObjectExpr *CXXTemporaryObjectExpr::Create(
+const ASTContext &Ctx, CXXConstructorDecl *Cons, QualType Ty,
+TypeSourceInfo *TSI, ArrayRef Args, SourceRange ParenOrBraceRange,
+bool HadMultipleCandidates, bool ListInitialization,
+bool StdInitListInitialization, bool ZeroInitialization) {
+  unsigned SizeOfTrailingObjects = sizeOfTrailingObjects(Args.size());
+  void *Mem =
+  Ctx.Allocate(sizeof(CXXTemporaryObjectExpr) + SizeOfTrailingObjects,
+   alignof(CXXTemporaryObjectExpr));
+  return new (Mem) CXXTemporaryObjectExpr(
+  Cons, Ty, TSI, Args, ParenOrBraceRange, HadMultipleCandidates,
+  ListInitialization, StdInitListInitialization, ZeroInitialization);
+}
+
+CXXTemporaryObjectExpr *
+CXXTemporaryObjectExpr::CreateEmpty(const ASTContext &Ctx, unsigned NumArgs) {
+  unsigned SizeOfTrailingObjects = sizeOfTrailingObjects(NumArgs);
+  void *Mem =
+  Ctx.Allocate(sizeof(CXXTemporar

[PATCH] D55382: Make -Wstring-plus-int warns even if when the result is not out of bounds

2018-12-22 Thread Nico Weber via Phabricator via cfe-commits
thakis accepted this revision.
thakis added a comment.

Still looks fine to me.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55382/new/

https://reviews.llvm.org/D55382



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r350004 - Improving this fatal diagnostic to help checker developers figure out what's actually gone wrong when they hit it.

2018-12-22 Thread Aaron Ballman via cfe-commits
Author: aaronballman
Date: Sat Dec 22 07:31:57 2018
New Revision: 350004

URL: http://llvm.org/viewvc/llvm-project?rev=350004&view=rev
Log:
Improving this fatal diagnostic to help checker developers figure out what's 
actually gone wrong when they hit it.

Modified:
cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp

Modified: cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp?rev=350004&r1=350003&r2=350004&view=diff
==
--- cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp (original)
+++ cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp Sat Dec 22 07:31:57 2018
@@ -58,7 +58,7 @@ static std::string getStringValue(const
 }
 
 // Calculates the integer value representing the BitsInit object
-static inline uint64_t getValueFromBitsInit(const BitsInit *B) {
+static inline uint64_t getValueFromBitsInit(const BitsInit *B, const Record 
&R) {
   assert(B->getNumBits() <= sizeof(uint64_t) * 8 && "BitInits' too long!");
 
   uint64_t Value = 0;
@@ -67,7 +67,8 @@ static inline uint64_t getValueFromBitsI
 if (Bit)
   Value |= uint64_t(Bit->getValue()) << i;
 else
-  PrintFatalError("Invalid bits");
+  PrintFatalError(R.getLoc(),
+  "missing Documentation for " + getCheckerFullName(&R));
   }
   return Value;
 }
@@ -75,7 +76,7 @@ static inline uint64_t getValueFromBitsI
 static std::string getCheckerDocs(const Record &R) {
   StringRef LandingPage;
   if (BitsInit *BI = R.getValueAsBitsInit("Documentation")) {
-uint64_t V = getValueFromBitsInit(BI);
+uint64_t V = getValueFromBitsInit(BI, R);
 if (V == 1)
   LandingPage = "available_checks.html";
 else if (V == 2)


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D54565: Introduce `-Wctad` as a subgroup of `-Wc++14-compat`

2018-12-22 Thread Arthur O'Dwyer via Phabricator via cfe-commits
Quuxplusone added a comment.

> - using CTAD on arbitrary class templates that weren't designed for it 
> creates a source compatibility problem that the class template author has no 
> control over nor say in
> - using CTAD on class templates that were designed for it does not create a 
> new source compatibility problem -- the class template author created the 
> source compatibility problem themselves when they designed how their class 
> templates would interact with CTAD

I don't see the distinction you're making. It sounds like you're saying, 
"`std::vector` is a 'CTAD-enabled' type. You (the client programmer) opted into 
CTAD when you started using `std::vector` in your project. If you don't want 
accidental CTAD, stop using `std::vector`" — which I don't think is practically 
useful advice.

> it would also seem like a good idea to have warnings for CTAD cases that we 
> have strong evidence are dangerous (eg, for `T(x...)` where `x` expands to a 
> pack containing a single `T`, we should warn if we use the copy-deduction 
> candidate and there's another candidate that would have been selected if the 
> copy-deduction candidate didn't get a priority boost)

That sounds like a good idea (although I am not qualified to implement it). I 
would also ask for a warning on `T t{x};` within a generic algorithm where `x` 
is of some dependent type that might or might not happen to be a specialization 
of `T`. And ideally we'd be able to produce the warning at parse time (i.e. 
generic-algorithm-testing time) rather than waiting until the offending 
template instantiation is actually instantiated (i.e. 
generic-algorithm-usage-in-the-field time), because by then it's too late for 
the client programmer to do anything about it.

For an (artificial) example of how accidental CTAD in a generic algorithm can 
cause interesting misbehavior, see 
https://quuxplusone.github.io/blog/2018/12/11/dont-inherit-from-std-types/#now-we-feed-them-to-this-functio


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54565/new/

https://reviews.llvm.org/D54565



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56054: [gn build] Add build files for clang/tools/{clang-diff, clang-import-test, diagtool and clang/lib/Tooling, clang/lib/Tooling/ASTDiff

2018-12-22 Thread Nico Weber via Phabricator via cfe-commits
thakis created this revision.
thakis added a reviewer: phosek.

Needed by check-clang.


https://reviews.llvm.org/D56054

Files:
  llvm/utils/gn/secondary/BUILD.gn
  llvm/utils/gn/secondary/clang/lib/Tooling/ASTDiff/BUILD.gn
  llvm/utils/gn/secondary/clang/lib/Tooling/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-diff/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-import-test/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/diagtool/BUILD.gn

Index: llvm/utils/gn/secondary/clang/tools/diagtool/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/diagtool/BUILD.gn
@@ -0,0 +1,18 @@
+executable("diagtool") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/include/clang/Basic:DiagnosticIndexName",
+"//clang/lib/Basic",
+"//clang/lib/Frontend",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"DiagTool.cpp",
+"DiagnosticNames.cpp",
+"FindDiagnosticID.cpp",
+"ListWarnings.cpp",
+"ShowEnabledWarnings.cpp",
+"TreeView.cpp",
+"diagtool_main.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/clang-import-test/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-import-test/BUILD.gn
@@ -0,0 +1,17 @@
+executable("clang-import-test") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/CodeGen",
+"//clang/lib/Driver",
+"//clang/lib/Frontend",
+"//clang/lib/Lex",
+"//clang/lib/Parse",
+"//llvm/lib/IR",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"clang-import-test.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/clang-diff/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-diff/BUILD.gn
@@ -0,0 +1,13 @@
+executable("clang-diff") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/Basic",
+"//clang/lib/Frontend",
+"//clang/lib/Tooling",
+"//clang/lib/Tooling/ASTDiff",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"ClangDiff.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/lib/Tooling/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/lib/Tooling/BUILD.gn
@@ -0,0 +1,31 @@
+static_library("Tooling") {
+  output_name = "clangTooling"
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/include/clang/Driver:Options",
+"//clang/lib/AST",
+"//clang/lib/ASTMatchers",
+"//clang/lib/Basic",
+"//clang/lib/Driver",
+"//clang/lib/Format",
+"//clang/lib/Frontend",
+"//clang/lib/Lex",
+"//clang/lib/Rewrite",
+"//clang/lib/Tooling/Core",
+  ]
+  sources = [
+"AllTUsExecution.cpp",
+"ArgumentsAdjusters.cpp",
+"CommonOptionsParser.cpp",
+"CompilationDatabase.cpp",
+"Execution.cpp",
+"FileMatchTrie.cpp",
+"FixIt.cpp",
+"InterpolatingCompilationDatabase.cpp",
+"JSONCompilationDatabase.cpp",
+"Refactoring.cpp",
+"RefactoringCallbacks.cpp",
+"StandaloneExecution.cpp",
+"Tooling.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/lib/Tooling/ASTDiff/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/lib/Tooling/ASTDiff/BUILD.gn
@@ -0,0 +1,13 @@
+static_library("ASTDiff") {
+  output_name = "clangToolingASTDiff"
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/Lex",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"ASTDiff.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/BUILD.gn
===
--- llvm/utils/gn/secondary/BUILD.gn
+++ llvm/utils/gn/secondary/BUILD.gn
@@ -1,7 +1,10 @@
 group("default") {
   deps = [
 ":clang",
+"//clang/tools/clang-diff",
 "//clang/tools/clang-format",
+"//clang/tools/clang-import-test",
+"//clang/tools/diagtool",
 "//lld/test",
 "//llvm/tools/llvm-cat",
 "//llvm/tools/llvm-lto",
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56055: [gn build] Add build files for clang/tools/{clang-refactor, clang-rename}, clang/utils/hmaptool, clang/lib/Tooling/Refactoring

2018-12-22 Thread Nico Weber via Phabricator via cfe-commits
thakis created this revision.
thakis added a reviewer: phosek.
Herald added a subscriber: jfb.

Needed for check-clang.


https://reviews.llvm.org/D56055

Files:
  llvm/utils/gn/secondary/BUILD.gn
  llvm/utils/gn/secondary/clang/lib/Tooling/Refactoring/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-refactor/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-rename/BUILD.gn
  llvm/utils/gn/secondary/clang/utils/hmaptool/BUILD.gn

Index: llvm/utils/gn/secondary/clang/utils/hmaptool/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/utils/hmaptool/BUILD.gn
@@ -0,0 +1,8 @@
+copy("hmaptool") {
+  sources = [
+"hmaptool",
+  ]
+  outputs = [
+"$root_out_dir/bin/{{source_file_part}}",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/clang-rename/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-rename/BUILD.gn
@@ -0,0 +1,16 @@
+executable("clang-rename") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/Basic",
+"//clang/lib/Frontend",
+"//clang/lib/Rewrite",
+"//clang/lib/Tooling",
+"//clang/lib/Tooling/Core",
+"//clang/lib/Tooling/Refactoring",
+"//llvm/lib/Option",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"ClangRename.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/clang-refactor/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-refactor/BUILD.gn
@@ -0,0 +1,19 @@
+executable("clang-refactor") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/Format",
+"//clang/lib/Frontend",
+"//clang/lib/Lex",
+"//clang/lib/Rewrite",
+"//clang/lib/Tooling",
+"//clang/lib/Tooling/Refactoring",
+"//llvm/lib/Option",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"ClangRefactor.cpp",
+"TestSupport.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/lib/Tooling/Refactoring/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/lib/Tooling/Refactoring/BUILD.gn
@@ -0,0 +1,29 @@
+static_library("Refactoring") {
+  output_name = "clangToolingRefactor"
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/ASTMatchers",
+"//clang/lib/Basic",
+"//clang/lib/Format",
+"//clang/lib/Index",
+"//clang/lib/Lex",
+"//clang/lib/Rewrite",
+"//clang/lib/Tooling/Core",
+"//llvm/lib/Support",
+  ]
+  include_dirs = [ "." ]
+  sources = [
+"ASTSelection.cpp",
+"ASTSelectionRequirements.cpp",
+"AtomicChange.cpp",
+"Extract/Extract.cpp",
+"Extract/SourceExtraction.cpp",
+"RefactoringActions.cpp",
+"Rename/RenamingAction.cpp",
+"Rename/SymbolOccurrences.cpp",
+"Rename/USRFinder.cpp",
+"Rename/USRFindingAction.cpp",
+"Rename/USRLocFinder.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/BUILD.gn
===
--- llvm/utils/gn/secondary/BUILD.gn
+++ llvm/utils/gn/secondary/BUILD.gn
@@ -4,7 +4,10 @@
 "//clang/tools/clang-diff",
 "//clang/tools/clang-format",
 "//clang/tools/clang-import-test",
+"//clang/tools/clang-refactor",
+"//clang/tools/clang-rename",
 "//clang/tools/diagtool",
+"//clang/utils/hmaptool",
 "//lld/test",
 "//llvm/tools/llvm-cat",
 "//llvm/tools/llvm-lto",
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56056: [gn build] Add build files for clang/tools/{arcmt-test, clang-check, clang-func-mapping}

2018-12-22 Thread Nico Weber via Phabricator via cfe-commits
thakis created this revision.
thakis added a reviewer: phosek.

Needed for check-clang.


https://reviews.llvm.org/D56056

Files:
  llvm/utils/gn/secondary/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/arcmt-test/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-check/BUILD.gn
  llvm/utils/gn/secondary/clang/tools/clang-func-mapping/BUILD.gn


Index: llvm/utils/gn/secondary/clang/tools/clang-func-mapping/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-func-mapping/BUILD.gn
@@ -0,0 +1,17 @@
+executable("clang-func-mapping") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/CrossTU",
+"//clang/lib/Frontend",
+"//clang/lib/Index",
+"//clang/lib/Tooling",
+"//llvm/lib/AsmParser",
+"//llvm/lib/MC",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"ClangFnMapGen.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/clang-check/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-check/BUILD.gn
@@ -0,0 +1,18 @@
+executable("clang-check") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/Driver",
+"//clang/lib/Frontend",
+"//clang/lib/Frontend/Rewrite",
+"//clang/lib/StaticAnalyzer/Frontend",
+"//clang/lib/Tooling",
+"//llvm/lib/Option",
+"//llvm/lib/Support",
+"//llvm/lib/Target:TargetsToBuild",
+  ]
+  sources = [
+"ClangCheck.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/arcmt-test/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/arcmt-test/BUILD.gn
@@ -0,0 +1,13 @@
+executable("arcmt-test") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/ARCMigrate",
+"//clang/lib/Basic",
+"//clang/lib/Frontend",
+"//clang/lib/Lex",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"arcmt-test.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/BUILD.gn
===
--- llvm/utils/gn/secondary/BUILD.gn
+++ llvm/utils/gn/secondary/BUILD.gn
@@ -1,3 +1,6 @@
+import("//clang/lib/ARCMigrate/enable.gni")
+import("//clang/lib/StaticAnalyzer/Frontend/enable.gni")
+
 group("default") {
   deps = [
 ":clang",
@@ -17,6 +20,15 @@
 "//llvm/tools/llvm-symbolizer:symlinks",
 "//llvm/tools/llvm-undname",
   ]
+  if (clang_enable_arcmt) {
+deps += [ "//clang/tools/arcmt-test" ]
+  }
+  if (clang_enable_static_analyzer) {
+deps += [
+  "//clang/tools/clang-check",
+  "//clang/tools/clang-func-mapping",
+]
+  }
   testonly = true
 }
 


Index: llvm/utils/gn/secondary/clang/tools/clang-func-mapping/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-func-mapping/BUILD.gn
@@ -0,0 +1,17 @@
+executable("clang-func-mapping") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/CrossTU",
+"//clang/lib/Frontend",
+"//clang/lib/Index",
+"//clang/lib/Tooling",
+"//llvm/lib/AsmParser",
+"//llvm/lib/MC",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"ClangFnMapGen.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/clang-check/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/clang-check/BUILD.gn
@@ -0,0 +1,18 @@
+executable("clang-check") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/AST",
+"//clang/lib/Basic",
+"//clang/lib/Driver",
+"//clang/lib/Frontend",
+"//clang/lib/Frontend/Rewrite",
+"//clang/lib/StaticAnalyzer/Frontend",
+"//clang/lib/Tooling",
+"//llvm/lib/Option",
+"//llvm/lib/Support",
+"//llvm/lib/Target:TargetsToBuild",
+  ]
+  sources = [
+"ClangCheck.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/clang/tools/arcmt-test/BUILD.gn
===
--- /dev/null
+++ llvm/utils/gn/secondary/clang/tools/arcmt-test/BUILD.gn
@@ -0,0 +1,13 @@
+executable("arcmt-test") {
+  configs += [ "//llvm/utils/gn/build:clang_code" ]
+  deps = [
+"//clang/lib/ARCMigrate",
+"//clang/lib/Basic",
+"//clang/lib/Frontend",
+"//clang/lib/Lex",
+"//llvm/lib/Support",
+  ]
+  sources = [
+"arcmt-test.cpp",
+  ]
+}
Index: llvm/utils/gn/secondary/BUILD.gn
===
--- llvm/utils/gn/secondary/BUILD.gn
+++ llvm/utils/gn/secondary/BUILD.gn
@@ -1,3 +1,6 @@
+import("//clang/lib/ARCMigrate/enable.gni")
+import("//clang/lib/StaticAnalyzer/Frontend/enable.gni")
+
 group("default")

[PATCH] D56055: [gn build] Add build files for clang/tools/{clang-refactor, clang-rename}, clang/utils/hmaptool, clang/lib/Tooling/Refactoring

2018-12-22 Thread Petr Hosek via Phabricator via cfe-commits
phosek accepted this revision.
phosek added a comment.
This revision is now accepted and ready to land.

LGTM


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56055/new/

https://reviews.llvm.org/D56055



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56054: [gn build] Add build files for clang/tools/{clang-diff, clang-import-test, diagtool and clang/lib/Tooling, clang/lib/Tooling/ASTDiff

2018-12-22 Thread Petr Hosek via Phabricator via cfe-commits
phosek accepted this revision.
phosek added a comment.
This revision is now accepted and ready to land.

LGTM


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56054/new/

https://reviews.llvm.org/D56054



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56056: [gn build] Add build files for clang/tools/{arcmt-test, clang-check, clang-func-mapping}

2018-12-22 Thread Petr Hosek via Phabricator via cfe-commits
phosek accepted this revision.
phosek added a comment.
This revision is now accepted and ready to land.

LGTM


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56056/new/

https://reviews.llvm.org/D56056



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56047: [Driver] Disable -faddrsig on Gentoo by default

2018-12-22 Thread Petr Hosek via Phabricator via cfe-commits
phosek added a comment.

Just a comment regarding the description, are you sure it's GNU strip and not 
as?


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56047/new/

https://reviews.llvm.org/D56047



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D56047: [Driver] Disable -faddrsig on Gentoo by default

2018-12-22 Thread Michał Górny via Phabricator via cfe-commits
mgorny added a comment.

In D56047#1340303 , @phosek wrote:

> Just a comment regarding the description, are you sure it's GNU strip and not 
> as?


Yes. https://bugs.gentoo.org/667854


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56047/new/

https://reviews.llvm.org/D56047



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits