ImportC and nothrow/@nogc?

Manu turkeyman at gmail.com
Tue Aug 20 09:13:43 UTC 2024


SEH is not C or C++, it's a Microsoft thing with no standards to speak of.
It seems irrelevant to this conversation to me.

On Tue, 20 Aug 2024 at 10:36, Richard (Rikki) Andrew Cattermole via
Digitalmars-d <digitalmars-d at puremagic.com> wrote:

>
> On 20/08/2024 12:24 PM, Gregor Mückl wrote:
> > On Sunday, 18 August 2024 at 09:42:16 UTC, Nicholas Wilson wrote:
> >> On Sunday, 18 August 2024 at 04:43:34 UTC, Manu wrote:
> >>> I just tried using ImportC for the first time ever, but I was surprised
> >>> when I immediately received a sea of errors calling the C symbols from
> >>> `nothrow @nogc` functions.
> >>> My entire program is `nothrow @nogc`... I assumed ImportC would be
> >>> supremely suitable in this context, but apparently not...
> >>>
> >>> Is there something I've missed? Is there a plan for this?
> >>> I found just one single very short forum thread...
> >>>
> >>> This is classic D experience; so much work has been done on this, and
> >>> then the moment I try and use something I encounter a showstopping
> >>> oversight >_<
> >>
> >> Well, C may call C++ which may throw. It is very unlikely to call the
> >> GC however.
> >>
> >> I don't think it would be hard to add a switch that "`extern(C)`
> >> functions being called from import C are `@nogc`".
> >
> > Here's what I'm thinking:
> >
> > The C function interface has no notion of C++ exceptions (AFAIK it's
> > following C specs, not C++), so C++ exceptions should not even be a
> > consideration at that point. I do not think that throwing a C++
> > exception up a stack that contains extern(C) functions is even properly
> > defined behavior on the C++ side. In other words, all ImportC
> > declarations should be implicitly @nothrow.
>
> Its defined for MSVC:
>
>
> https://learn.microsoft.com/en-us/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170
>
> "Structured exception handling (SEH) is a Microsoft extension to C and
> C++ to handle certain exceptional code situations, such as hardware
> faults, gracefully."
>
> I'm pretty sure for other platforms it is also defined as part of
> unwinding, although I can't be bothered to hunt for the specification.
> It's not about C, it's about languages that are not C++ (consider JIT's
> for instance).
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20240820/43360f6a/attachment.htm>


More information about the Digitalmars-d mailing list