[llvm] bf3a271 - [CodeGen] Report a normal instead of fatal error for label redefinition

John Brawn via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 9 02:56:42 PST 2021


Author: John Brawn
Date: 2021-03-09T10:54:41Z
New Revision: bf3a27196085e4fbfdb7095539a4d030a568aee7

URL: https://github.com/llvm/llvm-project/commit/bf3a27196085e4fbfdb7095539a4d030a568aee7
DIFF: https://github.com/llvm/llvm-project/commit/bf3a27196085e4fbfdb7095539a4d030a568aee7.diff

LOG: [CodeGen] Report a normal instead of fatal error for label redefinition

A symbol being redefined as a label is something that can happen as a result of
ordinary input, so it shouldn't cause a fatal error. Also adjust the error
message to match the one you get when a symbol is redefined as a variable.

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

Added: 
    llvm/test/CodeGen/X86/symbol-redefinition.ll

Modified: 
    llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    llvm/lib/MC/MCStreamer.cpp
    llvm/test/CodeGen/X86/equiv_with_vardef.ll
    llvm/test/CodeGen/X86/label-redefinition.ll
    llvm/test/CodeGen/XCore/section-name.ll
    llvm/test/MC/ELF/section-sym-err.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 37d879820820..dbe7028b1a48 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -824,9 +824,6 @@ void AsmPrinter::emitFunctionEntryLabel() {
   if (CurrentFnSym->isVariable())
     report_fatal_error("'" + Twine(CurrentFnSym->getName()) +
                        "' is a protected alias");
-  if (CurrentFnSym->isDefined())
-    report_fatal_error("'" + Twine(CurrentFnSym->getName()) +
-                       "' label emitted multiple times to assembly file");
 
   OutStreamer->emitLabel(CurrentFnSym);
 

diff  --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index ee4cce0befd8..997cebf34b5c 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -415,7 +415,8 @@ void MCStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
   Symbol->redefineIfPossible();
 
   if (!Symbol->isUndefined() || Symbol->isVariable())
-    return getContext().reportError(Loc, "invalid symbol redefinition");
+    return getContext().reportError(Loc, "symbol '" + Twine(Symbol->getName()) +
+                                             "' is already defined");
 
   assert(!Symbol->isVariable() && "Cannot emit a variable symbol!");
   assert(getCurrentSectionOnly() && "Cannot emit before setting section!");

diff  --git a/llvm/test/CodeGen/X86/equiv_with_vardef.ll b/llvm/test/CodeGen/X86/equiv_with_vardef.ll
index 11adcb8610a5..47f03d197fa9 100644
--- a/llvm/test/CodeGen/X86/equiv_with_vardef.ll
+++ b/llvm/test/CodeGen/X86/equiv_with_vardef.ll
@@ -6,4 +6,4 @@ module asm ".equiv var, __var"
 
 @var = global i32 0
 ; CHECK: <unknown>:0: error: symbol 'var' is already defined
-; CHECK: <unknown>:0: error: invalid symbol redefinition
+; CHECK: <unknown>:0: error: symbol 'var' is already defined

diff  --git a/llvm/test/CodeGen/X86/label-redefinition.ll b/llvm/test/CodeGen/X86/label-redefinition.ll
index b5570e6931b9..0b99a8d74f9f 100644
--- a/llvm/test/CodeGen/X86/label-redefinition.ll
+++ b/llvm/test/CodeGen/X86/label-redefinition.ll
@@ -1,5 +1,5 @@
 ; PR7054
-; RUN: not --crash llc %s -o - 2>&1 | grep "'_foo' label emitted multiple times to assembly"
+; RUN: not llc %s -o - 2>&1 | FileCheck %s
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
 target triple = "i386-apple-darwin10.0.0"
 
@@ -7,6 +7,7 @@ define i32 @"\01_foo"() {
   unreachable
 }
 
+; CHECK: <unknown>:0: error: symbol '_foo' is already defined
 define i32 @foo() {
 entry:
   unreachable

diff  --git a/llvm/test/CodeGen/X86/symbol-redefinition.ll b/llvm/test/CodeGen/X86/symbol-redefinition.ll
new file mode 100644
index 000000000000..d6e7327075de
--- /dev/null
+++ b/llvm/test/CodeGen/X86/symbol-redefinition.ll
@@ -0,0 +1,9 @@
+; RUN: not llc -mtriple=x86_64-unknown-unknown %s -o - 2>&1 | FileCheck %s
+
+; CHECK: <unknown>:0: error: symbol 'fn' is already defined
+define void @fn() section "fn" {
+  ret void
+}
+
+; CHECK: <unknown>:0: error: symbol 'var' is already defined
+ at var = global i32 0, section "var", align 4

diff  --git a/llvm/test/CodeGen/XCore/section-name.ll b/llvm/test/CodeGen/XCore/section-name.ll
index e7ff1aed1a98..548ddab8a3cf 100644
--- a/llvm/test/CodeGen/XCore/section-name.ll
+++ b/llvm/test/CodeGen/XCore/section-name.ll
@@ -6,4 +6,4 @@ define void @".dp.bss"() {
   ret void
 }
 
-; CHECK: <unknown>:0: error: invalid symbol redefinition
+; CHECK: <unknown>:0: error: symbol '.dp.bss' is already defined

diff  --git a/llvm/test/MC/ELF/section-sym-err.s b/llvm/test/MC/ELF/section-sym-err.s
index 789fee7c422c..afed21dbe723 100644
--- a/llvm/test/MC/ELF/section-sym-err.s
+++ b/llvm/test/MC/ELF/section-sym-err.s
@@ -3,4 +3,4 @@
 .section foo
 foo:
 
-// CHECK: error: invalid symbol redefinition
+// CHECK: error: symbol 'foo' is already defined


        


More information about the llvm-commits mailing list