HaxeFoundation / HaxeFoundation/haxe

[hxcpp] failing test if analyzer is disabled

Open
#7,757 1 comment 0 reactions 1 assignee Claimed by @hughsando View on GitHub
platform-cpp
Dominant language
Haxe
Stars
6.9k
Forks
715
Avg merge
2d 2h
Merged PRs (30d)
11

Description

This segfaults if no `-D analyzer-optimize` is used:

```haxe
import cpp.Callable;
import cpp.Object;
import haxe.io.Bytes;

class Main {
static function main() {
var callable = new CallableObject>(cffi_decompress);
var bytes = Bytes.alloc (100);
var data:Dynamic = callable.call (bytes);
trace(data);
}

static function cffi_decompress(a:Dynamic):Dynamic {
return null;
}
}
```

Generated code:

```c++
void Main_obj::main(){
HX_STACKFRAME(&_hx_pos_e47a9afac0942eb9_6_main)
HXLINE( 7) ::cpp::Function< ::hx::Object * ( ::hx::Object *) > this1 = ::Main_obj::cffi_decompress_dyn();
HXDLIN( 7) ::cpp::Function< ::hx::Object * ( ::hx::Object *) > callable = this1;
HXLINE( 8) ::haxe::io::Bytes bytes = ::haxe::io::Bytes_obj::alloc(100);
HXLINE( 9) ::Dynamic data = ( ( ::Dynamic)(callable(hx::DynamicPtr(bytes))) );
HXLINE( 10) ::haxe::Log_obj::trace(data,hx::SourceInfo(HX_("source/Main.hx",91,d3,a7,40),10,HX_("Main",59,64,2f,33),HX_("main",39,38,56,48)));
}
```

My investigation so far:

```
It ends up calling this: https://github.com/HaxeFoundation/hxcpp/blob/master/include/cpp/Pointer.h#L424
And this ends up calling `Object::__GetHandle`
Which is `virtual void *__GetHandle() const { return 0; }`
So that explains where the 0 comes from
```

Any advice?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.