Compilation crash, possibly on error output

Started by
2 comments, last by WitchLord 11 years, 1 month ago

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.

Advertisement

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 - Tower - free puzzle game

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.

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 - Tower - free puzzle game

This topic is closed to new replies.

Advertisement