Sign in to follow this  
TheAtom

Compilation crash, possibly on error output

Recommended Posts

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.

Edited by TheAtom

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this