Skip to main content
GameDev.net gamedev.net
🔒 Locked

Compilation crash, possibly on error output

Started by TheAtom Feb 23, 2013 at 9:27 AM 2 replies 2k views
Original Post
TheAtom
TheAtom

Tested on rev1558. Likely related to http://www.gamedev.net/topic/639247-import-function-with-default-argument/ (indeed the code is a chopped down version of the one found there). The following two modules crash on compilation:


// mod1
import void g(bool dummy, int x = -1) from "mod2";
    
void f(bool dummy, int x)
{
}

void run()
{
    f(true, 0);
    f(true, 0);
    g(false);
}
 
// mod2
import void run() from "mod1";

void g(bool dummy, int x = -1)
{
}

class T
{
    T()
    {
        run();
    }
};

T Dummy;

This should give an error saying that an unbound function has been called, but instead it crashes (null pointer access) with the following callstack:


asCTypeInfo::operator= + 110
asCArray<asSDeferredParam>::PushLast + 78, as_array.h (180)
asCCompiler::AfterFunctionCall + 403, as_compiler.cpp (7711)
asCCompiler::PerformFunctionCall + 1450, as_compiler.cpp (11745)
asCCompiler::MakeFunctionCall + 563, as_compiler.cpp (10071)
asCCompiler::CompileFunctionCall + 1957, as_compiler.cpp (8203)
asCCompiler::CompileExpressionValue + 1919, as_compiler.cpp (7256)
asCCompiler::CompileExpressionTerm + 169, as_compiler.cpp (6655)
asCCompiler::CompilePostFixExpression + 296, as_compiler.cpp (6603)
asCCompiler::CompileExpression + 277, as_compiler.cpp (6579)
asCCompiler::CompileCondition + 2440, as_compiler.cpp (6534)
asCCompiler::CompileAssignment + 420, as_compiler.cpp (6344)
asCCompiler::CompileExpressionStatement + 152, as_compiler.cpp (3304)
asCCompiler::CompileStatement + 145, as_compiler.cpp (2520)
asCCompiler::CompileStatementBlock + 260, as_compiler.cpp (1016)
asCCompiler::CompileFunction + 319, as_compiler.cpp (546)
asCBuilder::CompileFunctions + 434, as_builder.cpp (709)
asCBuilder::Build + 41, as_builder.cpp (241)
asCModule::Build + 110, as_module.cpp (223)

Removing any code makes the crash go away, leaving the expected error message, but I am unsure whether default arguments are necessary in the sample to see the crash.

WitchLord
WitchLord

It's crashing within the compiler. It didn't even get to the initalization of the global variable where it would be expected it get an 'unbound function' exception.

I'll look into it.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - <a href="http://www.angelcode.com/tower" rel
TheAtom
TheAtom

I just noticed that removing "T Dummy;" still leaves the crash with a slightly different callstack:


asCArray<asSDeferredParam>::PushLast + 62, as_array.h (180)
asCCompiler::AfterFunctionCall + 403, as_compiler.cpp (7711)
...

so indeed it has nothing to do with the error output.

WitchLord
WitchLord

I've fixed this in revision 1572.

It was the same bug reported by Wipe, i.e. the use of imported functions with default arguments.

With the fix you'll get the appropriate error message as the initialization of the global variable in mod2 fails due to unbound functions. If you need to get around this you can compile the module without initializing the global variables with SetEngineProperty(asEP_INIT_GLOBAL_VARS_AFTER_BUILD, false). Then manually initialize the global variables with ResetGlobalVars() after you've bound the imported functions.

Regards,

Andreas

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - <a href="http://www.angelcode.com/tower" rel

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.