<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jul 4, 2016 at 5:56 AM, George Rimar <span dir="ltr"><<a href="mailto:grimar@accesssoftek.com" target="_blank">grimar@accesssoftek.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">grimar created this revision.<br>
grimar added reviewers: ruiu, rafael.<br>
grimar added subscribers: llvm-commits, grimar.<br>
<br>
--fatal-warnings<br>
        Treat warnings as errors<br>
<br>
Since we temporarily switched reporting of multiple declarations of symbols in<br>
version script from error to warning, this one option seems to be usefull to have.<br>
Also it is usefull itself I think.<br>
<br>
<a href="http://reviews.llvm.org/D21969" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21969</a><br>
<br>
Files:<br>
  ELF/Config.h<br>
  ELF/Driver.cpp<br>
  ELF/Error.cpp<br>
  ELF/Options.td<br>
  test/ELF/fatal-warnings.s<br>
<br>
Index: test/ELF/fatal-warnings.s<br>
===================================================================<br>
--- test/ELF/fatal-warnings.s<br>
+++ test/ELF/fatal-warnings.s<br>
@@ -0,0 +1,16 @@<br>
+# REQUIRES: x86<br>
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t1.o<br>
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/warn-common.s -o %t2.o<br>
+<br>
+# RUN: ld.lld --warn-common %t1.o %t2.o -o %t1.out<br>
+# RUN: llvm-readobj %t1.out > /dev/null 2>&1<br>
+<br>
+# RUN: not ld.lld --warn-common --fatal-warnings %t1.o %t2.o -o %t2.out 2>&1 | \<br>
+# RUN:   FileCheck -check-prefix=ERR %s<br>
+# ERR: multiple common of<br>
+<br>
+.globl _start<br>
+_start:<br>
+<br>
+.type arr,@object<br>
+.comm arr,4,4<br>
Index: ELF/Options.td<br>
===================================================================<br>
--- ELF/Options.td<br>
+++ ELF/Options.td<br>
@@ -66,6 +66,9 @@<br>
 def export_dynamic_symbol: S<"export-dynamic-symbol">,<br>
   HelpText<"Put a symbol in the dynamic symbol table">;<br>
<br>
+def fatal_warnings: F<"fatal-warnings">,<br>
+  HelpText<"Treat warnings as errors">;<br>
+<br>
 def fini: S<"fini">, MetaVarName<"<symbol>">,<br>
   HelpText<"Specify a finalizer function">;<br>
<br>
@@ -232,7 +235,6 @@<br>
 def allow_shlib_undefined: F<"allow-shlib-undefined">;<br>
 def define_common: F<"define-common">;<br>
 def detect_odr_violations: F<"detect-odr-violations">;<br>
-def fatal_warnings: F<"fatal-warnings">;<br>
 def no_add_needed: F<"no-add-needed">;<br>
 def no_allow_shlib_undefined: F<"no-allow-shlib-undefined">;<br>
 def no_copy_dt_needed_entries: F<"no-copy-dt-needed-entries">,<br>
Index: ELF/Error.cpp<br>
===================================================================<br>
--- ELF/Error.cpp<br>
+++ ELF/Error.cpp<br>
@@ -24,7 +24,12 @@<br>
     llvm::outs() << Msg << "\n";<br>
 }<br>
<br>
-void warning(const Twine &Msg) { llvm::errs() << Msg << "\n"; }<br>
+void warning(const Twine &Msg) {<br>
+  if (Config->FatalWarnings)<br>
+    error(Msg);<br>
+  else<br>
+    llvm::errs() << Msg << "\n";<br></blockquote><div><br></div><div>You don't need `llvm::`.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+}<br>
<br>
 void error(const Twine &Msg) {<br>
   *ErrorOS << Msg << "\n";<br>
Index: ELF/Driver.cpp<br>
===================================================================<br>
--- ELF/Driver.cpp<br>
+++ ELF/Driver.cpp<br>
@@ -344,6 +344,7 @@<br>
   Config->EhFrameHdr = Args.hasArg(OPT_eh_frame_hdr);<br>
   Config->EnableNewDtags = !Args.hasArg(OPT_disable_new_dtags);<br>
   Config->ExportDynamic = Args.hasArg(OPT_export_dynamic);<br>
+  Config->FatalWarnings = Args.hasArg(OPT_fatal_warnings);<br></blockquote><div><br></div><div>This needs to be done earlier, probably at beginning of LinkerDriver::main. Otherwise, warnings before this line are not going to be handled as fatal errors.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   Config->GcSections = Args.hasArg(OPT_gc_sections);<br>
   Config->ICF = Args.hasArg(OPT_icf);<br>
   Config->NoGnuUnique = Args.hasArg(OPT_no_gnu_unique);<br>
Index: ELF/Config.h<br>
===================================================================<br>
--- ELF/Config.h<br>
+++ ELF/Config.h<br>
@@ -81,6 +81,7 @@<br>
   bool EhFrameHdr;<br>
   bool EnableNewDtags;<br>
   bool ExportDynamic;<br>
+  bool FatalWarnings;<br>
   bool GcSections;<br>
   bool GnuHash = false;<br>
   bool ICF;<br>
<br>
<br>
</blockquote></div><br></div></div>