From 78f156961e3ba5ed89e28c0c82ca3c891cfdc017 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 14 Nov 2007 18:44:58 +0000 Subject: [PATCH] From Craig Silverstein: Report output file name with ODR violation warning message. --- gold/gold.cc | 2 +- gold/symtab.cc | 7 ++++--- gold/symtab.h | 2 +- gold/testsuite/debug_msg.sh | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/gold/gold.cc b/gold/gold.cc index 2f17add3122..a4f145efba6 100644 --- a/gold/gold.cc +++ b/gold/gold.cc @@ -186,7 +186,7 @@ queue_middle_tasks(const General_options& options, // See if any of the input definitions violate the One Definition Rule. // TODO: if this is too slow, do this as a task, rather than inline. - symtab->detect_odr_violations(); + symtab->detect_odr_violations(options.output_file_name()); // Define some sections and symbols needed for a dynamic link. This // handles some cases we want to see before we read the relocs. diff --git a/gold/symtab.cc b/gold/symtab.cc index 539bf328c5b..caac2a77fb7 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -1852,7 +1852,7 @@ Symbol_table::sized_write_section_symbol(const Output_section* os, // but apparently different definitions (different source-file/line-no). void -Symbol_table::detect_odr_violations() const +Symbol_table::detect_odr_violations(const char* output_file_name) const { for (Odr_map::const_iterator it = candidate_odr_violations_.begin(); it != candidate_odr_violations_.end(); @@ -1881,8 +1881,9 @@ Symbol_table::detect_odr_violations() const if (line_nums.size() > 1) { - gold_warning(_("symbol %s defined in multiple places " - "(possible ODR violation):"), symbol_name); + gold_warning(_("while linking %s: symbol %s defined in multiple " + "places (possible ODR violation):"), + output_file_name, symbol_name); for (std::set::const_iterator it2 = line_nums.begin(); it2 != line_nums.end(); ++it2) diff --git a/gold/symtab.h b/gold/symtab.h index d32112256ab..3d3adbcc5a6 100644 --- a/gold/symtab.h +++ b/gold/symtab.h @@ -1027,7 +1027,7 @@ class Symbol_table // Check candidate_odr_violations_ to find symbols with the same name // but apparently different definitions (different source-file/line-no). void - detect_odr_violations() const; + detect_odr_violations(const char* output_file_name) const; // SYM is defined using a COPY reloc. Return the dynamic object // where the original definition was found. diff --git a/gold/testsuite/debug_msg.sh b/gold/testsuite/debug_msg.sh index 26c8ded960b..987aab7d6e8 100755 --- a/gold/testsuite/debug_msg.sh +++ b/gold/testsuite/debug_msg.sh @@ -56,7 +56,7 @@ check "debug_msg.o: in function int testfn(double):${srcdir}/debug_msg.c check "debug_msg.o: in function int testfn(double):${srcdir}/debug_msg.cc:45: undefined reference to 'undef_int'" # Check we detected the ODR (One Definition Rule) violation. -check "warning: symbol Ordering::operator()(int, int) *defined in multiple places (possible ODR violation):" +check ": symbol Ordering::operator()(int, int) *defined in multiple places (possible ODR violation):" check "odr_violation1.cc:5" check "odr_violation2.cc:5" -- 2.30.2