mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Improved errors
This commit is contained in:
parent
a69217e296
commit
d3bfc731ef
4 changed files with 63 additions and 3 deletions
|
@ -291,6 +291,13 @@ void BeIRCodeGen::FatalError(const StringImpl& err)
|
||||||
{
|
{
|
||||||
BeDumpContext dumpCtx;
|
BeDumpContext dumpCtx;
|
||||||
|
|
||||||
|
if (mActiveFunction != NULL)
|
||||||
|
{
|
||||||
|
failStr += "Function: ";
|
||||||
|
failStr += mActiveFunction->mName;
|
||||||
|
failStr += "\n";
|
||||||
|
}
|
||||||
|
|
||||||
if (mBeModule->mCurDbgLoc != NULL)
|
if (mBeModule->mCurDbgLoc != NULL)
|
||||||
{
|
{
|
||||||
failStr += "DbgLoc: ";
|
failStr += "DbgLoc: ";
|
||||||
|
|
|
@ -339,6 +339,48 @@ BfIRCodeGen::~BfIRCodeGen()
|
||||||
delete mLLVMContext;
|
delete mLLVMContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BfIRCodeGen::FatalError(const StringImpl &err)
|
||||||
|
{
|
||||||
|
String failStr = "Fatal Error in Module: ";
|
||||||
|
failStr += mModuleName;
|
||||||
|
failStr += "\n";
|
||||||
|
if (mLLVMModule != NULL)
|
||||||
|
{
|
||||||
|
if (mActiveFunction != NULL)
|
||||||
|
{
|
||||||
|
failStr += "Function: ";
|
||||||
|
failStr += mActiveFunction->getName().str();
|
||||||
|
failStr += "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
auto loc = mIRBuilder->getCurrentDebugLocation();
|
||||||
|
auto dbgLoc = loc.getAsMDNode();
|
||||||
|
if (dbgLoc != NULL)
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
llvm::raw_string_ostream os(str);
|
||||||
|
dbgLoc->print(os);
|
||||||
|
failStr += "DbgLoc: ";
|
||||||
|
failStr += str;
|
||||||
|
failStr += "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::MDNode* scope = loc.getScope();
|
||||||
|
if (scope != NULL)
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
llvm::raw_string_ostream os(str);
|
||||||
|
scope->print(os);
|
||||||
|
failStr += "Scope: ";
|
||||||
|
failStr += str;
|
||||||
|
failStr += "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
failStr += err;
|
||||||
|
BF_FATAL(failStr);
|
||||||
|
}
|
||||||
|
|
||||||
void BfIRCodeGen::Fail(const StringImpl& error)
|
void BfIRCodeGen::Fail(const StringImpl& error)
|
||||||
{
|
{
|
||||||
if (mFailed)
|
if (mFailed)
|
||||||
|
@ -885,6 +927,11 @@ void BfIRCodeGen::Read(llvm::Value*& llvmValue, BfIRCodeGenEntry** codeGenEntry)
|
||||||
else if (paramType == BfIRParamType_Arg)
|
else if (paramType == BfIRParamType_Arg)
|
||||||
{
|
{
|
||||||
int argIdx = mStream->Read();
|
int argIdx = mStream->Read();
|
||||||
|
if (argIdx >= mActiveFunction->arg_size())
|
||||||
|
{
|
||||||
|
FatalError(StrFormat("ARG out of bounds %d", argIdx));
|
||||||
|
}
|
||||||
|
|
||||||
BF_ASSERT(argIdx < mActiveFunction->arg_size());
|
BF_ASSERT(argIdx < mActiveFunction->arg_size());
|
||||||
auto argItr = mActiveFunction->arg_begin();
|
auto argItr = mActiveFunction->arg_begin();
|
||||||
for (int i = 0; i < argIdx; i++)
|
for (int i = 0; i < argIdx; i++)
|
||||||
|
@ -2624,10 +2671,13 @@ void BfIRCodeGen::HandleNextCmd()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//mIRBuilder->CreateAtomicCmpXchg();
|
|
||||||
|
|
||||||
if (auto funcPtr = llvm::dyn_cast<llvm::Function>(func))
|
if (auto funcPtr = llvm::dyn_cast<llvm::Function>(func))
|
||||||
{
|
{
|
||||||
|
// if (funcPtr->getName() == "__FAILCALL")
|
||||||
|
// {
|
||||||
|
// FatalError("__FAILCALL");
|
||||||
|
// }
|
||||||
|
|
||||||
int intrinId = -1;
|
int intrinId = -1;
|
||||||
if (mIntrinsicReverseMap.TryGetValue(funcPtr, &intrinId))
|
if (mIntrinsicReverseMap.TryGetValue(funcPtr, &intrinId))
|
||||||
{
|
{
|
||||||
|
|
|
@ -104,6 +104,7 @@ public:
|
||||||
BfIRCodeGen();
|
BfIRCodeGen();
|
||||||
~BfIRCodeGen();
|
~BfIRCodeGen();
|
||||||
|
|
||||||
|
void FatalError(const StringImpl& str);
|
||||||
virtual void Fail(const StringImpl& error) override;
|
virtual void Fail(const StringImpl& error) override;
|
||||||
|
|
||||||
void ProcessBfIRData(const BfSizedArray<uint8>& buffer) override;
|
void ProcessBfIRData(const BfSizedArray<uint8>& buffer) override;
|
||||||
|
|
|
@ -7065,7 +7065,9 @@ BfTypeDef* BfModule::FindTypeDef(const StringImpl& typeName, int numGenericArgs,
|
||||||
if (!mSystem->ParseAtomComposite(typeName, findName))
|
if (!mSystem->ParseAtomComposite(typeName, findName))
|
||||||
return NULL;
|
return NULL;
|
||||||
auto result = FindTypeDef(findName, numGenericArgs, typeInstanceOverride, error);
|
auto result = FindTypeDef(findName, numGenericArgs, typeInstanceOverride, error);
|
||||||
BF_ASSERT((result == NULL) || (result->mTypeCode != BfTypeCode_Extension));
|
// Don't allow just finding extensions here. This can happen in some 'using static' cases but generally shouldn't happen
|
||||||
|
if ((result != NULL) && (result->mTypeCode == BfTypeCode_Extension))
|
||||||
|
return NULL;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue