# Compilation crash, possibly on error output

This topic is 1795 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## 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 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 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 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