Fix crashes from malformed programs.
This commit is contained in:
5
ctx.cpp
5
ctx.cpp
@@ -1850,6 +1850,11 @@ llvm::Value *
|
|||||||
FunctionEmitContext::AllocaInst(LLVM_TYPE_CONST llvm::Type *llvmType,
|
FunctionEmitContext::AllocaInst(LLVM_TYPE_CONST llvm::Type *llvmType,
|
||||||
const char *name, int align,
|
const char *name, int align,
|
||||||
bool atEntryBlock) {
|
bool atEntryBlock) {
|
||||||
|
if (llvmType == NULL) {
|
||||||
|
assert(m->errorCount > 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
llvm::AllocaInst *inst = NULL;
|
llvm::AllocaInst *inst = NULL;
|
||||||
if (atEntryBlock) {
|
if (atEntryBlock) {
|
||||||
// We usually insert it right before the jump instruction at the
|
// We usually insert it right before the jump instruction at the
|
||||||
|
|||||||
4
expr.cpp
4
expr.cpp
@@ -3350,11 +3350,13 @@ StructMemberExpr::GetType() const {
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
const Type *elementType = structType->GetElementType(identifier);
|
const Type *elementType = structType->GetElementType(identifier);
|
||||||
if (elementType == NULL)
|
if (elementType == NULL) {
|
||||||
Error(identifierPos,
|
Error(identifierPos,
|
||||||
"Element name \"%s\" not present in struct type \"%s\".%s",
|
"Element name \"%s\" not present in struct type \"%s\".%s",
|
||||||
identifier.c_str(), structType->GetString().c_str(),
|
identifier.c_str(), structType->GetString().c_str(),
|
||||||
getCandidateNearMatches().c_str());
|
getCandidateNearMatches().c_str());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
const PointerType *pt = dynamic_cast<const PointerType *>(expr->GetType());
|
const PointerType *pt = dynamic_cast<const PointerType *>(expr->GetType());
|
||||||
if (structType->IsVaryingType() ||
|
if (structType->IsVaryingType() ||
|
||||||
|
|||||||
Reference in New Issue
Block a user