<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I committed another fix in 259452. That should fix the ASan OS X build bot that has been failing for a while:<div class=""><a href="http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/9934/consoleFull#-8529912418254eaf0-7326-4999-85b0-388101f2d404" class="">http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/9934/consoleFull#-8529912418254eaf0-7326-4999-85b0-388101f2d404</a><div class=""><br class=""></div><div class="">Anna.<br class=""><div><blockquote type="cite" class=""><div class="">On Jan 26, 2016, at 2:59 PM, Quentin Colombet via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Thanks!<div class=""><br class=""></div><div class="">Q.<br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 26, 2016, at 2:58 PM, Mike Aizatsky <<a href="mailto:aizatsky@chromium.org" class="">aizatsky@chromium.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Should be fixed by <div class=""><br class=""></div><div class=""><a href="http://reviews.llvm.org/rL258874" class="">http://reviews.llvm.org/rL258874</a><br class=""></div><div class=""><br class=""></div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Tue, Jan 26, 2016 at 2:48 PM Quentin Colombet <<a href="mailto:qcolombet@apple.com" class="">qcolombet@apple.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Mike,<br class="">
<br class="">
I believe this commit broke at least one bot:<br class="">
<a href="http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_build/10010/consoleFull#-158682280549ba4694-19c4-4d7e-bec5-911270d8a58c" rel="noreferrer" target="_blank" class="">http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_build/10010/consoleFull#-158682280549ba4694-19c4-4d7e-bec5-911270d8a58c</a><br class="">
<br class="">
Could you fix or revert please?<br class="">
<br class="">
Thanks,<br class="">
-Quentin<br class="">
> On Jan 26, 2016, at 12:10 PM, Mike Aizatsky via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class="">
><br class="">
> Author: aizatsky<br class="">
> Date: Tue Jan 26 14:10:01 2016<br class="">
> New Revision: 258849<br class="">
><br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=258849&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=258849&view=rev</a><br class="">
> Log:<br class="">
> [sanitizers] extracted process management functions<br class="">
><br class="">
> Differential Revision: <a href="http://reviews.llvm.org/D16546" rel="noreferrer" target="_blank" class="">http://reviews.llvm.org/D16546</a><br class="">
><br class="">
> Modified:<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.h<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br class="">
>    compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Tue Jan 26 14:10:01 2016<br class="">
> @@ -423,6 +423,10 @@ bool TemplateMatch(const char *templ, co<br class="">
> static const char kPathSeparator = SANITIZER_WINDOWS ? ';' : ':';<br class="">
><br class="">
> char *FindPathToBinary(const char *name) {<br class="">
> +  if (FileExists(name)) {<br class="">
> +    return internal_strdup(name);<br class="">
> +  }<br class="">
> +<br class="">
>   const char *path = GetEnv("PATH");<br class="">
>   if (!path)<br class="">
>     return nullptr;<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Tue Jan 26 14:10:01 2016<br class="">
> @@ -279,6 +279,17 @@ const char *GetPwd();<br class="">
> char *FindPathToBinary(const char *name);<br class="">
> bool IsPathSeparator(const char c);<br class="">
> bool IsAbsolutePath(const char *path);<br class="">
> +// Starts a subprocess and returs its pid.<br class="">
> +// If *_fd parameters are not kInvalidFd their corresponding input/output<br class="">
> +// streams will be redirect to the file. The files will always be closed<br class="">
> +// in parent process even in case of an error.<br class="">
> +// The child process will close all fds after STDERR_FILENO<br class="">
> +// before passing control to a program.<br class="">
> +pid_t StartSubprocess(const char *filename, const char *const argv[],<br class="">
> +                      fd_t stdin_fd = kInvalidFd, fd_t stdout_fd = kInvalidFd,<br class="">
> +                      fd_t stderr_fd = kInvalidFd);<br class="">
> +// Checks if specified process is still running<br class="">
> +bool IsProcessRunning(pid_t pid);<br class="">
><br class="">
> u32 GetUid();<br class="">
> void ReExec();<br class="">
> @@ -748,6 +759,23 @@ void GetPcSpBp(void *context, uptr *pc,<br class="">
> void DisableReexec();<br class="">
> void MaybeReexec();<br class="">
><br class="">
> +template <typename Fn><br class="">
> +class RunOnDestruction {<br class="">
> + public:<br class="">
> +  explicit RunOnDestruction(Fn fn) : fn_(fn) {}<br class="">
> +  ~RunOnDestruction() { fn_(); }<br class="">
> +<br class="">
> + private:<br class="">
> +  Fn fn_;<br class="">
> +};<br class="">
> +<br class="">
> +// A simple scope guard. Usage:<br class="">
> +// auto cleanup = at_scope_exit([]{ do_cleanup; });<br class="">
> +template <typename Fn><br class="">
> +RunOnDestruction<Fn> at_scope_exit(Fn fn) {<br class="">
> +  return RunOnDestruction<Fn>(fn);<br class="">
> +}<br class="">
> +<br class="">
> }  // namespace __sanitizer<br class="">
><br class="">
> inline void *operator new(__sanitizer::operator_new_size_type size,<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h Tue Jan 26 14:10:01 2016<br class="">
> @@ -89,6 +89,7 @@ typedef unsigned error_t;<br class="">
> typedef int fd_t;<br class="">
> typedef int error_t;<br class="">
> #endif<br class="">
> +typedef int pid_t;<br class="">
><br class="">
> // WARNING: OFF_T may be different from OS type off_t, depending on the value of<br class="">
> // _FILE_OFFSET_BITS. This definition of OFF_T matches the ABI of system calls<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.h?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.h?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.h (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.h Tue Jan 26 14:10:01 2016<br class="">
> @@ -81,6 +81,8 @@ int my_pthread_attr_getstack(void *attr,<br class="">
> int internal_sigaction(int signum, const void *act, void *oldact);<br class="">
> void internal_sigfillset(__sanitizer_sigset_t *set);<br class="">
><br class="">
> +uptr internal_execve(const char *filename, char *const argv[],<br class="">
> +                     char *const envp[]);<br class="">
> }  // namespace __sanitizer<br class="">
><br class="">
> #endif  // SANITIZER_POSIX_H<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc Tue Jan 26 14:10:01 2016<br class="">
> @@ -34,6 +34,7 @@<br class="">
> #include <sys/stat.h><br class="">
> #include <sys/time.h><br class="">
> #include <sys/types.h><br class="">
> +#include <sys/wait.h><br class="">
> #include <unistd.h><br class="">
><br class="">
> #if SANITIZER_FREEBSD<br class="">
> @@ -320,6 +321,68 @@ void AdjustStackSize(void *attr_) {<br class="">
> }<br class="">
> #endif // !SANITIZER_GO<br class="">
><br class="">
> +pid_t StartSubprocess(const char *program, const char *const argv[],<br class="">
> +                      fd_t stdin_fd, fd_t stdout_fd, fd_t stderr_fd) {<br class="">
> +  auto file_closer = at_scope_exit([&] {<br class="">
> +    if (stdin_fd != kInvalidFd) {<br class="">
> +      internal_close(stdin_fd);<br class="">
> +    }<br class="">
> +    if (stdout_fd != kInvalidFd) {<br class="">
> +      internal_close(stdout_fd);<br class="">
> +    }<br class="">
> +    if (stderr_fd != kInvalidFd) {<br class="">
> +      internal_close(stderr_fd);<br class="">
> +    }<br class="">
> +  });<br class="">
> +<br class="">
> +  int pid = internal_fork();<br class="">
> +<br class="">
> +  if (pid < 0) {<br class="">
> +    int rverrno;<br class="">
> +    if (internal_iserror(pid, &rverrno)) {<br class="">
> +      Report("WARNING: failed to fork (errno %d)\n", rverrno);<br class="">
> +    }<br class="">
> +    return pid;<br class="">
> +  }<br class="">
> +<br class="">
> +  if (pid == 0) {<br class="">
> +    // Child subprocess<br class="">
> +    if (stdin_fd != kInvalidFd) {<br class="">
> +      internal_close(STDIN_FILENO);<br class="">
> +      internal_dup2(stdin_fd, STDIN_FILENO);<br class="">
> +      internal_close(stdin_fd);<br class="">
> +    }<br class="">
> +    if (stdout_fd != kInvalidFd) {<br class="">
> +      internal_close(STDOUT_FILENO);<br class="">
> +      internal_dup2(stdout_fd, STDOUT_FILENO);<br class="">
> +      internal_close(stdout_fd);<br class="">
> +    }<br class="">
> +    if (stderr_fd != kInvalidFd) {<br class="">
> +      internal_close(STDERR_FILENO);<br class="">
> +      internal_dup2(stderr_fd, STDERR_FILENO);<br class="">
> +      internal_close(stderr_fd);<br class="">
> +    }<br class="">
> +<br class="">
> +    for (int fd = sysconf(_SC_OPEN_MAX); fd > 2; fd--) internal_close(fd);<br class="">
> +<br class="">
> +    internal_execve(program, const_cast<char **>(&argv[0]), nullptr);<br class="">
> +    internal__exit(1);<br class="">
> +  }<br class="">
> +<br class="">
> +  return pid;<br class="">
> +}<br class="">
> +<br class="">
> +bool IsProcessRunning(pid_t pid) {<br class="">
> +  int process_status;<br class="">
> +  uptr waitpid_status = internal_waitpid(pid, &process_status, WNOHANG);<br class="">
> +  int local_errno;<br class="">
> +  if (internal_iserror(waitpid_status, &local_errno)) {<br class="">
> +    VReport(1, "Waiting on the process failed (errno %d).\n", local_errno);<br class="">
> +    return false;<br class="">
> +  }<br class="">
> +  return waitpid_status == 0;<br class="">
> +}<br class="">
> +<br class="">
> } // namespace __sanitizer<br class="">
><br class="">
> #endif // SANITIZER_POSIX<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc Tue Jan 26 14:10:01 2016<br class="">
> @@ -137,47 +137,23 @@ bool SymbolizerProcess::StartSymbolizerS<br class="">
>     CHECK(infd);<br class="">
>     CHECK(outfd);<br class="">
><br class="">
> -    // Real fork() may call user callbacks registered with pthread_atfork().<br class="">
> -    pid = internal_fork();<br class="">
> -    if (pid == -1) {<br class="">
> -      // Fork() failed.<br class="">
> +    const char *argv[kArgVMax];<br class="">
> +    GetArgV(path_, argv);<br class="">
> +    pid = StartSubprocess(path_, argv, /* stdin */ outfd[0],<br class="">
> +                          /* stdout */ infd[1]);<br class="">
> +    if (pid < 0) {<br class="">
>       internal_close(infd[0]);<br class="">
> -      internal_close(infd[1]);<br class="">
> -      internal_close(outfd[0]);<br class="">
>       internal_close(outfd[1]);<br class="">
> -      Report("WARNING: failed to fork external symbolizer "<br class="">
> -             " (errno: %d)\n", errno);<br class="">
>       return false;<br class="">
> -    } else if (pid == 0) {<br class="">
> -      // Child subprocess.<br class="">
> -      internal_close(STDOUT_FILENO);<br class="">
> -      internal_close(STDIN_FILENO);<br class="">
> -      internal_dup2(outfd[0], STDIN_FILENO);<br class="">
> -      internal_dup2(infd[1], STDOUT_FILENO);<br class="">
> -      internal_close(outfd[0]);<br class="">
> -      internal_close(outfd[1]);<br class="">
> -      internal_close(infd[0]);<br class="">
> -      internal_close(infd[1]);<br class="">
> -      for (int fd = sysconf(_SC_OPEN_MAX); fd > 2; fd--)<br class="">
> -        internal_close(fd);<br class="">
> -      const char *argv[kArgVMax];<br class="">
> -      GetArgV(path_, argv);<br class="">
> -      execv(path_, const_cast<char **>(&argv[0]));<br class="">
> -      internal__exit(1);<br class="">
>     }<br class="">
><br class="">
> -    // Continue execution in parent process.<br class="">
> -    internal_close(outfd[0]);<br class="">
> -    internal_close(infd[1]);<br class="">
>     input_fd_ = infd[0];<br class="">
>     output_fd_ = outfd[1];<br class="">
>   }<br class="">
><br class="">
>   // Check that symbolizer subprocess started successfully.<br class="">
> -  int pid_status;<br class="">
>   SleepForMillis(kSymbolizerStartupTimeMillis);<br class="">
> -  int exited_pid = waitpid(pid, &pid_status, WNOHANG);<br class="">
> -  if (exited_pid != 0) {<br class="">
> +  if (!IsProcessRunning(pid)) {<br class="">
>     // Either waitpid failed, or child has already exited.<br class="">
>     Report("WARNING: external symbolizer didn't start up correctly!\n");<br class="">
>     return false;<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Tue Jan 26 14:10:01 2016<br class="">
> @@ -775,6 +775,20 @@ char **GetArgv() {<br class="">
>   return 0;<br class="">
> }<br class="">
><br class="">
> +pid_t StartSubprocess(const char *program, const char *const argv[],<br class="">
> +                      fd_t stdin_fd, fd_t stdout_fd, fd_t stderr_fd) {<br class="">
> +  // FIXME: implement on this platform<br class="">
> +  // Should be implemented based on<br class="">
> +  // SymbolizerProcess::StarAtSymbolizerSubprocess<br class="">
> +  // from lib/sanitizer_common/sanitizer_symbolizer_win.cc.<br class="">
> +  return -1;<br class="">
> +}<br class="">
> +<br class="">
> +bool IsProcessRunning(pid_t pid) {<br class="">
> +  // FIXME: implement on this platform.<br class="">
> +  return false;<br class="">
> +}<br class="">
> +<br class="">
> }  // namespace __sanitizer<br class="">
><br class="">
> #endif  // _WIN32<br class="">
><br class="">
> Modified: compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc?rev=258849&r1=258848&r2=258849&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc?rev=258849&r1=258848&r2=258849&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc (original)<br class="">
> +++ compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_linux_test.cc Tue Jan 26 14:10:01 2016<br class="">
> @@ -263,6 +263,36 @@ TEST(SanitizerLinux, ThreadSelfTest) {<br class="">
> }<br class="">
> #endif<br class="">
><br class="">
> +TEST(SanitizerCommon, StartSubprocessTest) {<br class="">
> +  int pipe_fds[2];<br class="">
> +  ASSERT_EQ(0, pipe(pipe_fds));<br class="">
> +  const char *argv[] = {"/bin/sh", "-c", "echo -n 'hello'"};<br class="">
> +  int pid = StartSubprocess("/bin/sh", const_cast<char **>(&argv[0]),<br class="">
> +                            kInvalidFd /* stdin */, pipe_fds[1] /* stdout */);<br class="">
> +  ASSERT_GT(pid, 0);<br class="">
> +<br class="">
> +  // wait for process to finish.<br class="">
> +  while (IsProcessRunning(pid)) {<br class="">
> +  }<br class="">
> +  ASSERT_FALSE(IsProcessRunning(pid));<br class="">
> +<br class="">
> +  char buffer[256];<br class="">
> +  {<br class="">
> +    char *ptr = buffer;<br class="">
> +    uptr bytes_read;<br class="">
> +    while (ReadFromFile(pipe_fds[0], ptr, 256, &bytes_read)) {<br class="">
> +      if (!bytes_read) {<br class="">
> +        break;<br class="">
> +      }<br class="">
> +      ptr += bytes_read;<br class="">
> +    }<br class="">
> +    ASSERT_EQ(5, ptr - buffer);<br class="">
> +    *ptr = 0;<br class="">
> +  }<br class="">
> +  ASSERT_EQ(0, strcmp(buffer, "hello")) << "Buffer: " << buffer;<br class="">
> +  internal_close(pipe_fds[0]);<br class="">
> +}<br class="">
> +<br class="">
> }  // namespace __sanitizer<br class="">
><br class="">
> #endif  // SANITIZER_LINUX<br class="">
><br class="">
><br class="">
> _______________________________________________<br class="">
> llvm-commits mailing list<br class="">
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
<br class="">
</blockquote></div>
</div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></blockquote></div><br class=""></div></div></body></html>