diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1357,19 +1357,9 @@ else assert(GIS.hasLocalLinkage() && "Invalid alias or ifunc linkage"); - bool IsFunction = GIS.getValueType()->isFunctionTy(); - - // Treat bitcasts of functions as functions also. This is important at least - // on WebAssembly where object and function addresses can't alias each other. - if (!IsFunction) - if (auto *CE = dyn_cast(GIS.getIndirectSymbol())) - if (CE->getOpcode() == Instruction::BitCast) - IsFunction = - CE->getOperand(0)->getType()->getPointerElementType()->isFunctionTy(); - // Set the symbol type to function if the alias has a function type. // This affects codegen when the aliasee is not a function. - if (IsFunction) + if (GIS.getType()->getPointerElementType()->isFunctionTy()) OutStreamer->emitSymbolAttribute(Name, isa(GIS) ? MCSA_ELF_TypeIndFunction : MCSA_ELF_TypeFunction); diff --git a/llvm/test/MC/WebAssembly/function-alias.ll b/llvm/test/MC/WebAssembly/function-alias.ll deleted file mode 100644 --- a/llvm/test/MC/WebAssembly/function-alias.ll +++ /dev/null @@ -1,44 +0,0 @@ -; RUN: llc -filetype=obj %s -o - | llvm-readobj --symbols | FileCheck %s - -target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" -target triple = "wasm32-unknown-unknown-wasm" - -@foo = alias i8, bitcast (i8* ()* @func to i8*) -@bar = alias i8* (), i8* ()* @func -@bar2 = alias i8* (), i8* ()* @bar - -define i8* @func() { - call i8* @bar2(); - ret i8* @foo; -} - -; CHECK: Symbols [ -; CHECK-NEXT: Symbol { -; CHECK-NEXT: Name: func -; CHECK-NEXT: Type: FUNCTION (0x0) -; CHECK-NEXT: Flags [ (0x0) -; CHECK-NEXT: ] -; CHECK-NEXT: ElementIndex: 0x0 -; CHECK-NEXT: } -; CHECK-NEXT: Symbol { -; CHECK-NEXT: Name: bar2 -; CHECK-NEXT: Type: FUNCTION (0x0) -; CHECK-NEXT: Flags [ (0x0) -; CHECK-NEXT: ] -; CHECK-NEXT: ElementIndex: 0x0 -; CHECK-NEXT: } -; CHECK-NEXT: Symbol { -; CHECK-NEXT: Name: foo -; CHECK-NEXT: Type: FUNCTION (0x0) -; CHECK-NEXT: Flags [ (0x0) -; CHECK-NEXT: ] -; CHECK-NEXT: ElementIndex: 0x0 -; CHECK-NEXT: } -; CHECK-NEXT: Symbol { -; CHECK-NEXT: Name: bar -; CHECK-NEXT: Type: FUNCTION (0x0) -; CHECK-NEXT: Flags [ (0x0) -; CHECK-NEXT: ] -; CHECK-NEXT: ElementIndex: 0x0 -; CHECK-NEXT: } -; CHECK-NEXT: ]