diff --git a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs index 6ff0549a..3813c473 100644 --- a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs +++ b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs @@ -2629,14 +2629,20 @@ private bool IsUnchecked(string targetTypeName, Stmt stmt) // case CX_StmtClass.CX_StmtClass_CXXFunctionalCastExpr: // case CX_StmtClass.CX_StmtClass_CXXConstCastExpr: // case CX_StmtClass.CX_StmtClass_CXXDynamicCastExpr: - // case CX_StmtClass.CX_StmtClass_CXXReinterpretCastExpr: + + case CX_StmtClass.CX_StmtClass_CXXReinterpretCastExpr: + { + var reinterpretCastExpr = (CXXReinterpretCastExpr)stmt; + + return IsUnchecked(targetTypeName, reinterpretCastExpr.SubExprAsWritten) + || IsUnchecked(targetTypeName, reinterpretCastExpr.Handle.Evaluate); + } // case CX_StmtClass.CX_StmtClass_ObjCBridgedCastExpr: case CX_StmtClass.CX_StmtClass_ImplicitCastExpr: { var implicitCastExpr = (ImplicitCastExpr)stmt; - var implicitCastExprTypeName = GetRemappedTypeName(implicitCastExpr, context: null, implicitCastExpr.Type, out _); return IsUnchecked(targetTypeName, implicitCastExpr.SubExprAsWritten) || IsUnchecked(targetTypeName, implicitCastExpr.Handle.Evaluate); diff --git a/tests/ClangSharp.PInvokeGenerator.UnitTests/VarDeclarationTest.cs b/tests/ClangSharp.PInvokeGenerator.UnitTests/VarDeclarationTest.cs index 1cb83127..9df1033e 100644 --- a/tests/ClangSharp.PInvokeGenerator.UnitTests/VarDeclarationTest.cs +++ b/tests/ClangSharp.PInvokeGenerator.UnitTests/VarDeclarationTest.cs @@ -279,5 +279,22 @@ public static unsafe partial class Methods await ValidateGeneratedBindingsAsync(inputContents, expectedOutputContents); } + [Fact] + public async Task UncheckedReinterpretCastMacroTest() + { + var inputContents = $@"#define Macro1 reinterpret_cast(-1)"; + + var expectedOutputContents = $@"namespace ClangSharp.Test +{{ + public static unsafe partial class Methods + {{ + [NativeTypeName(""#define Macro1 reinterpret_cast(-1)"")] + public static readonly int* Macro1 = unchecked((int*)(-1)); + }} +}} +"; + + await ValidateGeneratedBindingsAsync(inputContents, expectedOutputContents); + } } }