Skip to content

Clang's crash recovery support breaks the .NET runtime's ability to throw NullReferenceException on Linux #7

@PathogenDavid

Description

@PathogenDavid

This was slowly driving me insane while debugging a test which tests shoving a null in a place where it doesn't belong.

Minimal repro:

ClangSharp.Pathogen.LibClangSharpResolver.VerifyResolverWasUsed();
object o = null!;
Console.WriteLine(o.GetHashCode());

You would expect o.GetHashCode to throw NullReferenceException, but on Linux this will throw SEHException instead.

As a workaround you can set LIBCLANG_DISABLE_CRASH_RECOVERY=1, which seems to indicate there's a conflict between Clang's crash recovery and .NET's internal handling of null dereferences.

The easiest workaround would be to use setenv before initializing libclang as suggested here: dotnet/ClangSharp#167 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions