Skip to content

windows-rdl / clang: interface guids defined via macro emit incorrect output #4226

@riverar

Description

@riverar

C header:

#define MIDL_INTERFACE(x) struct __declspec(uuid(x))

MIDL_INTERFACE("00000000-0000-0000-C000-000000000046")
IBase {
    virtual int __stdcall QueryInterface(void* riid, void** ppvObject) = 0;
    virtual unsigned int __stdcall AddRef() = 0;
    virtual unsigned int __stdcall Release() = 0;
};

MIDL_INTERFACE("AF86E2E0-B12D-4c6a-9C5A-D7AA65101E90")
IDerived : public IBase {
public:
    virtual int __stdcall GetIids(unsigned int* iidCount, void** iids) = 0;
    virtual int __stdcall GetRuntimeClassName(void** className) = 0;
    virtual int __stdcall GetTrustLevel(int* trustLevel) = 0;
};

Expected RDL output:

#[win32]
mod Test {
    #[guid(0x00000000_0000_0000_c000_000000000046)]
    interface IBase {
        fn QueryInterface(&self, riid: *mut void, ppvObject: *mut *mut void) -> i32;
        fn AddRef(&self) -> u32;
        fn Release(&self) -> u32;
    }
    #[guid(0xaf86e2e0_b12d_4c6a_9c5a_d7aa65101e90)]
    interface IDerived: IBase {
        fn GetIids(&self, iidCount: *mut u32, iids: *mut *mut void) -> i32;
        fn GetRuntimeClassName(&self, className: *mut *mut void) -> i32;
        fn GetTrustLevel(&self, trustLevel: *mut i32) -> i32;
    }
}

Actual RDL output:

#[win32]
mod Test {
    #[guid(0x00000000_0000_0000_c000_000000000046)]
    interface IBase {
        fn QueryInterface(&self, riid: *mut void, ppvObject: *mut *mut void) -> i32;
        fn AddRef(&self) -> u32;
        fn Release(&self) -> u32;
    }
    #[guid(0x00000000_0000_0000_c000_000000000046)]
    interface IDerived: IBase {
        fn GetIids(&self, iidCount: *mut u32, iids: *mut *mut void) -> i32;
        fn GetRuntimeClassName(&self, className: *mut *mut void) -> i32;
        fn GetTrustLevel(&self, trustLevel: *mut i32) -> i32;
    }
}

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions