diff options
Diffstat (limited to 'lib/VMCore/LLVMContext.cpp')
-rw-r--r-- | lib/VMCore/LLVMContext.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index 68c4a766f6..bdb1b4ba2e 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/lib/VMCore/LLVMContext.cpp @@ -97,16 +97,30 @@ void LLVMContext::emitError(const Twine &ErrorStr) { emitError(0U, ErrorStr); } -void LLVMContext::emitError(const Instruction *I, const Twine &ErrorStr) { +void LLVMContext::emitWarning(const Twine &ErrorStr) { + emitWarning(0U, ErrorStr); +} + +static unsigned getSrcLocation(const Instruction *I) { unsigned LocCookie = 0; if (const MDNode *SrcLoc = I->getMetadata("srcloc")) { if (SrcLoc->getNumOperands() != 0) if (const ConstantInt *CI = dyn_cast<ConstantInt>(SrcLoc->getOperand(0))) LocCookie = CI->getZExtValue(); } + return LocCookie; +} + +void LLVMContext::emitError(const Instruction *I, const Twine &ErrorStr) { + unsigned LocCookie = getSrcLocation(I); return emitError(LocCookie, ErrorStr); } +void LLVMContext::emitWarning(const Instruction *I, const Twine &ErrorStr) { + unsigned LocCookie = getSrcLocation(I); + return emitWarning(LocCookie, ErrorStr); +} + void LLVMContext::emitError(unsigned LocCookie, const Twine &ErrorStr) { // If there is no error handler installed, just print the error and exit. if (pImpl->InlineAsmDiagHandler == 0) { @@ -120,6 +134,19 @@ void LLVMContext::emitError(unsigned LocCookie, const Twine &ErrorStr) { pImpl->InlineAsmDiagHandler(Diag, pImpl->InlineAsmDiagContext, LocCookie); } +void LLVMContext::emitWarning(unsigned LocCookie, const Twine &ErrorStr) { + // If there is no handler installed, just print the warning. + if (pImpl->InlineAsmDiagHandler == 0) { + errs() << "warning: " << ErrorStr << "\n"; + return; + } + + // If we do have a handler, we can report the warning. + SMDiagnostic Diag("", SourceMgr::DK_Warning, ErrorStr.str()); + + pImpl->InlineAsmDiagHandler(Diag, pImpl->InlineAsmDiagContext, LocCookie); +} + //===----------------------------------------------------------------------===// // Metadata Kind Uniquing //===----------------------------------------------------------------------===// |