From 6275c66a89e8b783f41333f18b7c3bee7b5bd89f Mon Sep 17 00:00:00 2001 From: David Nadlinger Date: Thu, 6 Sep 2012 03:37:21 +0200 Subject: [PATCH] Fixed segfault on invalid naked functions. Emitting a frontend error during codegen is somewhat problematic in any case, but stopping if an error ocurred should work just fine here. --- gen/naked.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gen/naked.cpp b/gen/naked.cpp index 15bd27e7..b703f758 100644 --- a/gen/naked.cpp +++ b/gen/naked.cpp @@ -18,7 +18,7 @@ void Statement::toNakedIR(IRState *p) { - error("not allowed in naked function"); + error("statement not allowed in naked function"); } ////////////////////////////////////////////////////////////////////////////////////////// @@ -179,6 +179,11 @@ void DtoDefineNakedFunction(FuncDeclaration* fd) // emit body fd->fbody->toNakedIR(gIR); + // We could have generated new errors in toNakedIR(), but we are in codegen + // already so we have to abort here. + if (global.errors) + fatal(); + // emit size after body // llvm does this on linux, but not on osx or Win if (global.params.os != OSMacOSX && global.params.os != OSWindows)