diff --git a/llvm/lib/IR/CMakeLists.txt b/llvm/lib/IR/CMakeLists.txt index aacfe2b637989..88c493860c8d4 100644 --- a/llvm/lib/IR/CMakeLists.txt +++ b/llvm/lib/IR/CMakeLists.txt @@ -78,6 +78,7 @@ add_llvm_component_library(LLVMCore LINK_COMPONENTS BinaryFormat + Demangle Remarks Support TargetParser diff --git a/llvm/lib/IR/DiagnosticInfo.cpp b/llvm/lib/IR/DiagnosticInfo.cpp index fb238e2aac59c..a19d9d607f4b6 100644 --- a/llvm/lib/IR/DiagnosticInfo.cpp +++ b/llvm/lib/IR/DiagnosticInfo.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/Twine.h" #include "llvm/ADT/iterator_range.h" +#include "llvm/Demangle/Demangle.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DebugInfoMetadata.h" @@ -440,7 +441,8 @@ void llvm::diagnoseDontCall(const CallInst &CI) { } void DiagnosticInfoDontCall::print(DiagnosticPrinter &DP) const { - DP << "call to " << getFunctionName() << " marked \"dontcall-"; + DP << "call to " << demangle(getFunctionName().str()) + << " marked \"dontcall-"; if (getSeverity() == DiagnosticSeverity::DS_Error) DP << "error\""; else diff --git a/llvm/test/CodeGen/X86/attr-dontcall.ll b/llvm/test/CodeGen/X86/attr-dontcall.ll index 8b518aee6dce2..7de44b81dfeaa 100644 --- a/llvm/test/CodeGen/X86/attr-dontcall.ll +++ b/llvm/test/CodeGen/X86/attr-dontcall.ll @@ -27,7 +27,34 @@ define void @bar4() { ret void } +declare i32 @_Z3fooi(i32) "dontcall-error" +define void @demangle1() { + call i32 @_Z3fooi (i32 0) + ret void +} +declare float @_Z3barf(float) "dontcall-error" +define void @demangle2() { + call float @_Z3barf(float 0.0) + ret void +} + +declare i32 @_RNvC1a3baz() "dontcall-error" +define void @demangle3() { + call i32 @_RNvC1a3baz() + ret void +} + + +declare i32 @_Z3fooILi79EEbU7_ExtIntIXT_EEi(i32) "dontcall-error" +define void @demangle4() { + call i32 @_Z3fooILi79EEbU7_ExtIntIXT_EEi(i32 0) + ret void +} ; CHECK: error: call to foo marked "dontcall-error": e ; CHECK: warning: call to foo2 marked "dontcall-warn": w ; CHECK: warning: call to foo3 marked "dontcall-warn"{{$}} ; CHECK: warning: call to foo4 marked "dontcall-warn": cast +; CHECK: error: call to foo(int) marked "dontcall-error" +; CHECK: error: call to bar(float) marked "dontcall-error" +; CHECK: error: call to a::baz marked "dontcall-error" +; CHECK: error: call to bool foo<79>(int _ExtInt<79>) marked "dontcall-error"