writeln() assertion failed in hybrid x64

Szymon Gatner via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Sep 3 11:47:59 PDT 2014


On Wednesday, 3 September 2014 at 09:55:55 UTC, Szymon Gatner 
wrote:
> Hey,
>
> I am trying to build hybrid (C++, D) application (more here: 
> http://forum.dlang.org/thread/ugkpqprobonorbdunxsx@forum.dlang.org) 
> but I am now getting assertion failure from within writeln(). 
> writeln() is called from a D function that has C++ linkage:
>
> D definition:
>
> extern (C++) void printSomething()
> {
>   writeln("hello from D");
> }
>
>
> usage from C++:
>
> extern "C++" void printSomething();
>
> int main()
> {
>   DRuntime druntime; // rt_init(), rt_term()
>   printSomething();
> }
>
> this causes run-time assertion in fprintf() called from within 
> writeln():
>
> int __cdecl fprintf (
>         FILE *str,
>         const char *format,
>         ...
>         )
> /*
>  * 'F'ile (stream) 'PRINT', 'F'ormatted
>  */
> {
>     va_list(arglist);
>     FILE *stream;
>     int buffing;
>     int retval=0;
>
>     _VALIDATE_RETURN( (str != NULL), EINVAL, -1); <=== assetion 
> here
>
> [...]
> }
>
> meaning that str arg passed is null. writelns()'s call site:
>
>         enforce(fprintf(.stdout._p.handle, "%.*s\n",
>                         cast(int) args[0].length, args[0].ptr)
> >= 0);
>
> so for some reason .stdout._p.handle is null.

Any ideas why this happens?


More information about the Digitalmars-d-learn mailing list