Thread overview
Oddness with C binding
May 03, 2012
James Miller
May 03, 2012
Don Clugston
May 03, 2012
Shahid
May 03, 2012
I'm writing bindings to XCB right now, and its mostly going smoothly. However I have encountered a very strange problem.

This bit of code segfaults with DMD:

    auto connection = xcb_connect(null, null);

    auto setup = xcb_get_setup(connection);
    auto iter = xcb_setup_roots_iterator(setup);

    auto screen = iter.data;

But it doesn't segfault with LDC2. This is odd to me because as far as I am aware LDC2 uses the same front end at DMD. This must mean that there is a bug in the dmd backend.

I thought it could be related to const optimizations, but I removed all the const declarations from the appropriate C bindings and the same thing happened.

I don't have the time to create a minimal test case for this, so I can't really file a bug report on it. I was also wondering what could cause this problem. I am using dmd 2.059 and the latest ldc from the arch repositories.

--
James Miller
May 03, 2012
On 03/05/12 06:28, James Miller wrote:
> I'm writing bindings to XCB right now, and its mostly going smoothly.
> However I have encountered a very strange problem.
>
> This bit of code segfaults with DMD:
>
> auto connection = xcb_connect(null, null);
>
> auto setup = xcb_get_setup(connection);
> auto iter = xcb_setup_roots_iterator(setup);
>
> auto screen = iter.data;
>
> But it doesn't segfault with LDC2. This is odd to me because as far as I
> am aware LDC2 uses the same front end at DMD. This must mean that there
> is a bug in the dmd backend.
>
> I thought it could be related to const optimizations, but I removed all
> the const declarations from the appropriate C bindings and the same
> thing happened.
>
> I don't have the time to create a minimal test case for this, so I can't
> really file a bug report on it. I was also wondering what could cause
> this problem. I am using dmd 2.059 and the latest ldc from the arch
> repositories.
>
> --
> James Miller

The infamous bug 5570?
May 03, 2012
I was blocked by Issue 5570 (DMD64), here was the progress I made before giving up https://gist.github.com/1131642