<div dir="ltr">Reverted in r295507:<br><br><div>    Behavior races on ErrorCount. If the enqueued paths are evaluated</div><div>    eagerly (in enqueuePath) then the behavior is as the test expects. But</div><div>    they may not be evaluated until the future is waited on, in run() -</div><div>    which is after the early return/exit on ErrorCount. (this causes the</div><div>    test to fail (because in the "/ERRORCOUNT:XYZ" test, no other errors</div><div>    are printed), at least for me, on linux)</div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Feb 17, 2017 at 2:57 PM Bob Haarman via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: inglorion<br class="gmail_msg">
Date: Fri Feb 17 16:46:06 2017<br class="gmail_msg">
New Revision: 295507<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=295507&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=295507&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
[COFF] support /ERRORLIMIT option<br class="gmail_msg">
<br class="gmail_msg">
Summary: This adds support for reporting multiple errors in a single invocation of lld-link. The limit defaults to 20 and can be changed with the /ERRORLIMIT command line parameter, or set to unlimited by passing a value of 0.<br class="gmail_msg">
<br class="gmail_msg">
Reviewers: pcc, ruiu<br class="gmail_msg">
<br class="gmail_msg">
Reviewed By: ruiu<br class="gmail_msg">
<br class="gmail_msg">
Differential Revision: <a href="https://reviews.llvm.org/D29691" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D29691</a><br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    lld/trunk/test/COFF/error-limit.test<br class="gmail_msg">
Modified:<br class="gmail_msg">
    lld/trunk/COFF/Driver.cpp<br class="gmail_msg">
    lld/trunk/COFF/Error.cpp<br class="gmail_msg">
    lld/trunk/COFF/Options.td<br class="gmail_msg">
    lld/trunk/COFF/SymbolTable.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/COFF/Driver.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=295507&r1=295506&r2=295507&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=295507&r1=295506&r2=295507&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/COFF/Driver.cpp (original)<br class="gmail_msg">
+++ lld/trunk/COFF/Driver.cpp Fri Feb 17 16:46:06 2017<br class="gmail_msg">
@@ -63,7 +63,7 @@ bool link(ArrayRef<const char *> Args, r<br class="gmail_msg">
       (ErrorOS == &llvm::errs() && Process::StandardErrHasColors());<br class="gmail_msg">
   Driver = make<LinkerDriver>();<br class="gmail_msg">
   Driver->link(Args);<br class="gmail_msg">
-  return true;<br class="gmail_msg">
+  return !ErrorCount;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 // Drop directory components and replace extension with ".exe" or ".dll".<br class="gmail_msg">
@@ -126,9 +126,10 @@ void LinkerDriver::addBuffer(std::unique<br class="gmail_msg">
   if (Magic == file_magic::bitcode)<br class="gmail_msg">
     return Symtab.addFile(make<BitcodeFile>(MBRef));<br class="gmail_msg">
   if (Magic == file_magic::coff_cl_gl_object)<br class="gmail_msg">
-    fatal(MBRef.getBufferIdentifier() + ": is not a native COFF file. "<br class="gmail_msg">
+    error(MBRef.getBufferIdentifier() + ": is not a native COFF file. "<br class="gmail_msg">
           "Recompile without /GL");<br class="gmail_msg">
-  Symtab.addFile(make<ObjectFile>(MBRef));<br class="gmail_msg">
+  else<br class="gmail_msg">
+    Symtab.addFile(make<ObjectFile>(MBRef));<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 void LinkerDriver::enqueuePath(StringRef Path) {<br class="gmail_msg">
@@ -138,8 +139,9 @@ void LinkerDriver::enqueuePath(StringRef<br class="gmail_msg">
   enqueueTask([=]() {<br class="gmail_msg">
     auto MBOrErr = Future->get();<br class="gmail_msg">
     if (MBOrErr.second)<br class="gmail_msg">
-      fatal(MBOrErr.second, "could not open " + PathStr);<br class="gmail_msg">
-    Driver->addBuffer(std::move(MBOrErr.first));<br class="gmail_msg">
+      error("could not open " + PathStr + ": " + MBOrErr.second.message());<br class="gmail_msg">
+    else<br class="gmail_msg">
+      Driver->addBuffer(std::move(MBOrErr.first));<br class="gmail_msg">
   });<br class="gmail_msg">
<br class="gmail_msg">
   if (Config->OutputFile == "")<br class="gmail_msg">
@@ -155,12 +157,14 @@ void LinkerDriver::addArchiveBuffer(Memo<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   InputFile *Obj;<br class="gmail_msg">
-  if (Magic == file_magic::coff_object)<br class="gmail_msg">
+  if (Magic == file_magic::coff_object) {<br class="gmail_msg">
     Obj = make<ObjectFile>(MB);<br class="gmail_msg">
-  else if (Magic == file_magic::bitcode)<br class="gmail_msg">
+  } else if (Magic == file_magic::bitcode) {<br class="gmail_msg">
     Obj = make<BitcodeFile>(MB);<br class="gmail_msg">
-  else<br class="gmail_msg">
-    fatal("unknown file type: " + MB.getBufferIdentifier());<br class="gmail_msg">
+  } else {<br class="gmail_msg">
+    error("unknown file type: " + MB.getBufferIdentifier());<br class="gmail_msg">
+    return;<br class="gmail_msg">
+  }<br class="gmail_msg">
<br class="gmail_msg">
   Obj->ParentName = ParentName;<br class="gmail_msg">
   Symtab.addFile(Obj);<br class="gmail_msg">
@@ -238,7 +242,7 @@ void LinkerDriver::parseDirectives(Strin<br class="gmail_msg">
     case OPT_throwingnew:<br class="gmail_msg">
       break;<br class="gmail_msg">
     default:<br class="gmail_msg">
-      fatal(Arg->getSpelling() + " is not allowed in .drectve");<br class="gmail_msg">
+      error(Arg->getSpelling() + " is not allowed in .drectve");<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
 }<br class="gmail_msg">
@@ -456,6 +460,15 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
   // Parse command line options.<br class="gmail_msg">
   opt::InputArgList Args = Parser.parseLINK(ArgsArr.slice(1));<br class="gmail_msg">
<br class="gmail_msg">
+  // Handle /errorlimit early, because error() depends on it.<br class="gmail_msg">
+  if (auto *Arg = Args.getLastArg(OPT_errorlimit)) {<br class="gmail_msg">
+    int N = 20;<br class="gmail_msg">
+    StringRef S = Arg->getValue();<br class="gmail_msg">
+    if (S.getAsInteger(10, N))<br class="gmail_msg">
+      error(Arg->getSpelling() + " number expected, but got " + S);<br class="gmail_msg">
+    Config->ErrorLimit = N;<br class="gmail_msg">
+  }<br class="gmail_msg">
+<br class="gmail_msg">
   // Handle /help<br class="gmail_msg">
   if (Args.hasArg(OPT_help)) {<br class="gmail_msg">
     printHelp(ArgsArr[0]);<br class="gmail_msg">
@@ -514,8 +527,9 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
   // Handle /noentry<br class="gmail_msg">
   if (Args.hasArg(OPT_noentry)) {<br class="gmail_msg">
     if (!Args.hasArg(OPT_dll))<br class="gmail_msg">
-      fatal("/noentry must be specified with /dll");<br class="gmail_msg">
-    Config->NoEntry = true;<br class="gmail_msg">
+      error("/noentry must be specified with /dll");<br class="gmail_msg">
+    else<br class="gmail_msg">
+      Config->NoEntry = true;<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   // Handle /dll<br class="gmail_msg">
@@ -526,10 +540,12 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
<br class="gmail_msg">
   // Handle /fixed<br class="gmail_msg">
   if (Args.hasArg(OPT_fixed)) {<br class="gmail_msg">
-    if (Args.hasArg(OPT_dynamicbase))<br class="gmail_msg">
-      fatal("/fixed must not be specified with /dynamicbase");<br class="gmail_msg">
-    Config->Relocatable = false;<br class="gmail_msg">
-    Config->DynamicBase = false;<br class="gmail_msg">
+    if (Args.hasArg(OPT_dynamicbase)) {<br class="gmail_msg">
+      error("/fixed must not be specified with /dynamicbase");<br class="gmail_msg">
+    } else {<br class="gmail_msg">
+      Config->Relocatable = false;<br class="gmail_msg">
+      Config->DynamicBase = false;<br class="gmail_msg">
+    }<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   // Handle /machine<br class="gmail_msg">
@@ -601,24 +617,24 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
         StringRef OptLevel = StringRef(S).substr(7);<br class="gmail_msg">
         if (OptLevel.getAsInteger(10, Config->LTOOptLevel) ||<br class="gmail_msg">
             Config->LTOOptLevel > 3)<br class="gmail_msg">
-          fatal("/opt:lldlto: invalid optimization level: " + OptLevel);<br class="gmail_msg">
+          error("/opt:lldlto: invalid optimization level: " + OptLevel);<br class="gmail_msg">
         continue;<br class="gmail_msg">
       }<br class="gmail_msg">
       if (StringRef(S).startswith("lldltojobs=")) {<br class="gmail_msg">
         StringRef Jobs = StringRef(S).substr(11);<br class="gmail_msg">
         if (Jobs.getAsInteger(10, Config->LTOJobs) || Config->LTOJobs == 0)<br class="gmail_msg">
-          fatal("/opt:lldltojobs: invalid job count: " + Jobs);<br class="gmail_msg">
+          error("/opt:lldltojobs: invalid job count: " + Jobs);<br class="gmail_msg">
         continue;<br class="gmail_msg">
       }<br class="gmail_msg">
       if (StringRef(S).startswith("lldltopartitions=")) {<br class="gmail_msg">
         StringRef N = StringRef(S).substr(17);<br class="gmail_msg">
         if (N.getAsInteger(10, Config->LTOPartitions) ||<br class="gmail_msg">
             Config->LTOPartitions == 0)<br class="gmail_msg">
-          fatal("/opt:lldltopartitions: invalid partition count: " + N);<br class="gmail_msg">
+          error("/opt:lldltopartitions: invalid partition count: " + N);<br class="gmail_msg">
         continue;<br class="gmail_msg">
       }<br class="gmail_msg">
       if (S != "ref" && S != "lbr" && S != "nolbr")<br class="gmail_msg">
-        fatal("/opt: unknown option: " + S);<br class="gmail_msg">
+        error("/opt: unknown option: " + S);<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
@@ -686,6 +702,9 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
     if (Optional<StringRef> Path = findLib(Arg->getValue()))<br class="gmail_msg">
       enqueuePath(*Path);<br class="gmail_msg">
<br class="gmail_msg">
+  if (ErrorCount)<br class="gmail_msg">
+    return;<br class="gmail_msg">
+<br class="gmail_msg">
   // Windows specific -- Create a resource file containing a manifest file.<br class="gmail_msg">
   if (Config->Manifest == Configuration::Embed)<br class="gmail_msg">
     addBuffer(createManifestRes());<br class="gmail_msg">
@@ -730,11 +749,13 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
     // Windows specific -- If entry point name is not given, we need to<br class="gmail_msg">
     // infer that from user-defined entry name.<br class="gmail_msg">
     StringRef S = findDefaultEntry();<br class="gmail_msg">
-    if (S.empty())<br class="gmail_msg">
-      fatal("entry point must be defined");<br class="gmail_msg">
-    Config->Entry = addUndefined(S);<br class="gmail_msg">
-    if (Config->Verbose)<br class="gmail_msg">
-      outs() << "Entry name inferred: " << S << "\n";<br class="gmail_msg">
+    if (S.empty()) {<br class="gmail_msg">
+      error("entry point must be defined");<br class="gmail_msg">
+    } else {<br class="gmail_msg">
+      Config->Entry = addUndefined(S);<br class="gmail_msg">
+      if (Config->Verbose)<br class="gmail_msg">
+        outs() << "Entry name inferred: " << S << "\n";<br class="gmail_msg">
+    }<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   // Handle /export<br class="gmail_msg">
@@ -819,6 +840,9 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
       addUndefined(mangle("_load_config_used"));<br class="gmail_msg">
   } while (run());<br class="gmail_msg">
<br class="gmail_msg">
+  if (ErrorCount)<br class="gmail_msg">
+    return;<br class="gmail_msg">
+<br class="gmail_msg">
   // If /msvclto is given, we use the MSVC linker to link LTO output files.<br class="gmail_msg">
   // This is useful because MSVC link.exe can generate complete PDBs.<br class="gmail_msg">
   if (Args.hasArg(OPT_msvclto)) {<br class="gmail_msg">
@@ -844,10 +868,13 @@ void LinkerDriver::link(ArrayRef<const c<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
   // Handle /safeseh.<br class="gmail_msg">
-  if (Args.hasArg(OPT_safeseh))<br class="gmail_msg">
+  if (Args.hasArg(OPT_safeseh)) {<br class="gmail_msg">
     for (ObjectFile *File : Symtab.ObjectFiles)<br class="gmail_msg">
       if (!File->SEHCompat)<br class="gmail_msg">
-        fatal("/safeseh: " + File->getName() + " is not compatible with SEH");<br class="gmail_msg">
+        error("/safeseh: " + File->getName() + " is not compatible with SEH");<br class="gmail_msg">
+    if (ErrorCount)<br class="gmail_msg">
+      return;<br class="gmail_msg">
+  }<br class="gmail_msg">
<br class="gmail_msg">
   // Windows specific -- when we are creating a .dll file, we also<br class="gmail_msg">
   // need to create a .lib file.<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/COFF/Error.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Error.cpp?rev=295507&r1=295506&r2=295507&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Error.cpp?rev=295507&r1=295506&r2=295507&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/COFF/Error.cpp (original)<br class="gmail_msg">
+++ lld/trunk/COFF/Error.cpp Fri Feb 17 16:46:06 2017<br class="gmail_msg">
@@ -59,12 +59,13 @@ void error(const Twine &Msg) {<br class="gmail_msg">
   std::lock_guard<std::mutex> Lock(Mu);<br class="gmail_msg">
<br class="gmail_msg">
   if (Config->ErrorLimit == 0 || ErrorCount < Config->ErrorLimit) {<br class="gmail_msg">
+    errs() << "error " << ErrorCount << " of " << Config->ErrorLimit << "\n";<br class="gmail_msg">
     print("error: ", raw_ostream::RED);<br class="gmail_msg">
     *ErrorOS << Msg << "\n";<br class="gmail_msg">
   } else if (ErrorCount == Config->ErrorLimit) {<br class="gmail_msg">
     print("error: ", raw_ostream::RED);<br class="gmail_msg">
     *ErrorOS << "too many errors emitted, stopping now"<br class="gmail_msg">
-             << " (use -error-limit=0 to see all errors)\n";<br class="gmail_msg">
+             << " (use /ERRORLIMIT:0 to see all errors)\n";<br class="gmail_msg">
     exitLld(1);<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/COFF/Options.td<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Options.td?rev=295507&r1=295506&r2=295507&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Options.td?rev=295507&r1=295506&r2=295507&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/COFF/Options.td (original)<br class="gmail_msg">
+++ lld/trunk/COFF/Options.td Fri Feb 17 16:46:06 2017<br class="gmail_msg">
@@ -21,6 +21,8 @@ def base    : P<"base", "Base address of<br class="gmail_msg">
 def defaultlib : P<"defaultlib", "Add the library to the list of input files">;<br class="gmail_msg">
 def delayload : P<"delayload", "Delay loaded DLL name">;<br class="gmail_msg">
 def entry   : P<"entry", "Name of entry point symbol">;<br class="gmail_msg">
+def errorlimit : P<"errorlimit",<br class="gmail_msg">
+    "Maximum number of errors to emit before stopping (0 = no limit)">;<br class="gmail_msg">
 def export  : P<"export", "Export a function">;<br class="gmail_msg">
 // No help text because /failifmismatch is not intended to be used by the user.<br class="gmail_msg">
 def failifmismatch : P<"failifmismatch", "">;<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/COFF/SymbolTable.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.cpp?rev=295507&r1=295506&r2=295507&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.cpp?rev=295507&r1=295506&r2=295507&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/COFF/SymbolTable.cpp (original)<br class="gmail_msg">
+++ lld/trunk/COFF/SymbolTable.cpp Fri Feb 17 16:46:06 2017<br class="gmail_msg">
@@ -193,7 +193,7 @@ void SymbolTable::addLazy(ArchiveFile *F<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 void SymbolTable::reportDuplicate(Symbol *Existing, InputFile *NewFile) {<br class="gmail_msg">
-  fatal("duplicate symbol: " + toString(*Existing->body()) + " in " +<br class="gmail_msg">
+  error("duplicate symbol: " + toString(*Existing->body()) + " in " +<br class="gmail_msg">
         toString(Existing->body()->getFile()) + " and in " +<br class="gmail_msg">
         (NewFile ? toString(NewFile) : "(internal)"));<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
Added: lld/trunk/test/COFF/error-limit.test<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/error-limit.test?rev=295507&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/error-limit.test?rev=295507&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/test/COFF/error-limit.test (added)<br class="gmail_msg">
+++ lld/trunk/test/COFF/error-limit.test Fri Feb 17 16:46:06 2017<br class="gmail_msg">
@@ -0,0 +1,33 @@<br class="gmail_msg">
+RUN: not lld-link 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 \<br class="gmail_msg">
+RUN:   21 22 2>&1 | FileCheck -check-prefix=DEFAULT %s<br class="gmail_msg">
+<br class="gmail_msg">
+DEFAULT:      could not open 01<br class="gmail_msg">
+DEFAULT:      could not open 20<br class="gmail_msg">
+DEFAULT-NEXT: too many errors emitted, stopping now (use /ERRORLIMIT:0 to see all errors)<br class="gmail_msg">
+DEFAULT-NOT:  could not open 21<br class="gmail_msg">
+<br class="gmail_msg">
+RUN: not lld-link /ERRORLIMIT:5 01 02 03 04 05 06 07 08 09 10 2>&1 \<br class="gmail_msg">
+RUN:   | FileCheck -check-prefix=LIMIT5 %s<br class="gmail_msg">
+<br class="gmail_msg">
+LIMIT5:      could not open 01<br class="gmail_msg">
+LIMIT5:      could not open 05<br class="gmail_msg">
+LIMIT5-NEXT: too many errors emitted, stopping now (use /ERRORLIMIT:0 to see all errors)<br class="gmail_msg">
+LIMIT5-NOT:  could not open 06<br class="gmail_msg">
+<br class="gmail_msg">
+RUN: not lld-link /ERRORLIMIT:0 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 \<br class="gmail_msg">
+RUN:   16 17 18 19 20 21 22 2>&1 | FileCheck -check-prefix=UNLIMITED %s<br class="gmail_msg">
+<br class="gmail_msg">
+UNLIMITED:     could not open 01<br class="gmail_msg">
+UNLIMITED:     could not open 20<br class="gmail_msg">
+UNLIMITED:     could not open 21<br class="gmail_msg">
+UNLIMITED:     could not open 22<br class="gmail_msg">
+UNLIMITED-NOT: too many errors emitted, stopping now (use /ERRORLIMIT:0 to see all errors)<br class="gmail_msg">
+<br class="gmail_msg">
+RUN: not lld-link /ERRORLIMIT:XYZ 01 02 03 04 05 06 07 08 09 10 11 12 13 14 \<br class="gmail_msg">
+RUN:   15 16 17 18 19 20 21 22 2>&1 | FileCheck -check-prefix=WRONG %s<br class="gmail_msg">
+<br class="gmail_msg">
+WRONG:      /ERRORLIMIT: number expected, but got XYZ<br class="gmail_msg">
+WRONG:      could not open 01<br class="gmail_msg">
+WRONG:      could not open 19<br class="gmail_msg">
+WRONG-NEXT: too many errors emitted, stopping now (use /ERRORLIMIT:0 to see all errors)<br class="gmail_msg">
+WRONG-NOT:  could not open 20<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div>