Skip to content

Commit b34c3aa

Browse files
committed
Ensure compatible-codegen inserts "unsafe" where required
1 parent a021d95 commit b34c3aa

File tree

13 files changed

+31
-31
lines changed

13 files changed

+31
-31
lines changed

sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5933,7 +5933,7 @@ private bool IsUnsafe(RecordDecl recordDecl)
59335933
{
59345934
return true;
59355935
}
5936-
else if ((decl is RecordDecl nestedRecordDecl) && nestedRecordDecl.IsAnonymousStructOrUnion && IsUnsafe(nestedRecordDecl))
5936+
else if ((decl is RecordDecl nestedRecordDecl) && nestedRecordDecl.IsAnonymousStructOrUnion && (IsUnsafe(nestedRecordDecl) || Config.GenerateCompatibleCode))
59375937
{
59385938
return true;
59395939
}

tests/ClangSharp.PInvokeGenerator.UnitTests/CSharpCompatibleUnix/FunctionDeclarationBodyImportTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1446,7 +1446,7 @@ void MyFunction()
14461446
namespace ClangSharp.Test
14471447
{
14481448
[StructLayout(LayoutKind.Explicit)]
1449-
public partial struct MyUnion
1449+
public unsafe partial struct MyUnion
14501450
{
14511451
[FieldOffset(0)]
14521452
[NativeTypeName(""__AnonymousRecord_ClangUnsavedFile_L3_C5"")]

tests/ClangSharp.PInvokeGenerator.UnitTests/CSharpCompatibleUnix/StructDeclarationTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,7 @@ public partial struct _w_e__Struct
12491249
public {expectedManagedType} value;
12501250
}}
12511251
1252-
public partial struct _Anonymous1_e__Struct
1252+
public unsafe partial struct _Anonymous1_e__Struct
12531253
{{
12541254
public {expectedManagedType} value1;
12551255
@@ -1318,7 +1318,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
13181318

13191319
var expectedOutputContents = @"namespace ClangSharp.Test
13201320
{
1321-
public partial struct MyStruct
1321+
public unsafe partial struct MyStruct
13221322
{
13231323
public int x;
13241324
@@ -1375,7 +1375,7 @@ public int o0_b16_4
13751375
}
13761376
}
13771377
1378-
public partial struct _Anonymous_e__Struct
1378+
public unsafe partial struct _Anonymous_e__Struct
13791379
{
13801380
public int z;
13811381
@@ -1708,7 +1708,7 @@ protected override Task RemapNestedAnonymousTestImpl()
17081708

17091709
var expectedOutputContents = @"namespace ClangSharp.Test
17101710
{
1711-
public partial struct MyStruct
1711+
public unsafe partial struct MyStruct
17121712
{
17131713
public double r;
17141714

tests/ClangSharp.PInvokeGenerator.UnitTests/CSharpCompatibleUnix/UnionDeclarationTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
891891
namespace ClangSharp.Test
892892
{
893893
[StructLayout(LayoutKind.Explicit)]
894-
public partial struct MyUnion
894+
public unsafe partial struct MyUnion
895895
{
896896
[FieldOffset(0)]
897897
public int x;
@@ -952,7 +952,7 @@ public int o0_b16_4
952952
}
953953
954954
[StructLayout(LayoutKind.Explicit)]
955-
public partial struct _Anonymous_e__Union
955+
public unsafe partial struct _Anonymous_e__Union
956956
{
957957
[FieldOffset(0)]
958958
public int z;
@@ -1283,7 +1283,7 @@ protected override Task RemapNestedAnonymousTestImpl()
12831283
namespace ClangSharp.Test
12841284
{
12851285
[StructLayout(LayoutKind.Explicit)]
1286-
public partial struct MyUnion
1286+
public unsafe partial struct MyUnion
12871287
{
12881288
[FieldOffset(0)]
12891289
public double r;

tests/ClangSharp.PInvokeGenerator.UnitTests/CSharpCompatibleWindows/FunctionDeclarationBodyImportTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1446,7 +1446,7 @@ void MyFunction()
14461446
namespace ClangSharp.Test
14471447
{
14481448
[StructLayout(LayoutKind.Explicit)]
1449-
public partial struct MyUnion
1449+
public unsafe partial struct MyUnion
14501450
{
14511451
[FieldOffset(0)]
14521452
[NativeTypeName(""__AnonymousRecord_ClangUnsavedFile_L3_C5"")]

tests/ClangSharp.PInvokeGenerator.UnitTests/CSharpCompatibleWindows/StructDeclarationTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,7 +1257,7 @@ public partial struct _w_e__Struct
12571257
public {expectedManagedType} value;
12581258
}}
12591259
1260-
public partial struct _Anonymous1_e__Struct
1260+
public unsafe partial struct _Anonymous1_e__Struct
12611261
{{
12621262
public {expectedManagedType} value1;
12631263
@@ -1326,7 +1326,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
13261326

13271327
var expectedOutputContents = @"namespace ClangSharp.Test
13281328
{
1329-
public partial struct MyStruct
1329+
public unsafe partial struct MyStruct
13301330
{
13311331
public int x;
13321332
@@ -1383,7 +1383,7 @@ public int o0_b16_4
13831383
}
13841384
}
13851385
1386-
public partial struct _Anonymous_e__Struct
1386+
public unsafe partial struct _Anonymous_e__Struct
13871387
{
13881388
public int z;
13891389
@@ -1716,7 +1716,7 @@ protected override Task RemapNestedAnonymousTestImpl()
17161716

17171717
var expectedOutputContents = @"namespace ClangSharp.Test
17181718
{
1719-
public partial struct MyStruct
1719+
public unsafe partial struct MyStruct
17201720
{
17211721
public double r;
17221722

tests/ClangSharp.PInvokeGenerator.UnitTests/CSharpCompatibleWindows/UnionDeclarationTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
898898
namespace ClangSharp.Test
899899
{
900900
[StructLayout(LayoutKind.Explicit)]
901-
public partial struct MyUnion
901+
public unsafe partial struct MyUnion
902902
{
903903
[FieldOffset(0)]
904904
public int x;
@@ -959,7 +959,7 @@ public int o0_b16_4
959959
}
960960
961961
[StructLayout(LayoutKind.Explicit)]
962-
public partial struct _Anonymous_e__Union
962+
public unsafe partial struct _Anonymous_e__Union
963963
{
964964
[FieldOffset(0)]
965965
public int z;
@@ -1290,7 +1290,7 @@ protected override Task RemapNestedAnonymousTestImpl()
12901290
namespace ClangSharp.Test
12911291
{
12921292
[StructLayout(LayoutKind.Explicit)]
1293-
public partial struct MyUnion
1293+
public unsafe partial struct MyUnion
12941294
{
12951295
[FieldOffset(0)]
12961296
public double r;

tests/ClangSharp.PInvokeGenerator.UnitTests/XmlCompatibleUnix/FunctionDeclarationBodyImportTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1629,7 +1629,7 @@ void MyFunction()
16291629
var expectedOutputContents = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>
16301630
<bindings>
16311631
<namespace name=""ClangSharp.Test"">
1632-
<struct name=""MyUnion"" access=""public"" layout=""Explicit"">
1632+
<struct name=""MyUnion"" access=""public"" unsafe=""true"" layout=""Explicit"">
16331633
<field name=""Anonymous"" access=""public"" offset=""0"">
16341634
<type native=""__AnonymousRecord_ClangUnsavedFile_L3_C5"">_Anonymous_e__Struct</type>
16351635
</field>

tests/ClangSharp.PInvokeGenerator.UnitTests/XmlCompatibleUnix/StructDeclarationTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
12581258
var expectedOutputContents = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>
12591259
<bindings>
12601260
<namespace name=""ClangSharp.Test"">
1261-
<struct name=""MyStruct"" access=""public"">
1261+
<struct name=""MyStruct"" access=""public"" unsafe=""true"">
12621262
<field name=""x"" access=""public"">
12631263
<type>int</type>
12641264
</field>
@@ -1304,7 +1304,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
13041304
<code>Anonymous.Anonymous.o0_b16_4 = value;</code>
13051305
</set>
13061306
</field>
1307-
<struct name=""_Anonymous_e__Struct"" access=""public"">
1307+
<struct name=""_Anonymous_e__Struct"" access=""public"" unsafe=""true"">
13081308
<field name=""z"" access=""public"">
13091309
<type>int</type>
13101310
</field>
@@ -1654,7 +1654,7 @@ protected override Task RemapNestedAnonymousTestImpl()
16541654
var expectedOutputContents = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>
16551655
<bindings>
16561656
<namespace name=""ClangSharp.Test"">
1657-
<struct name=""MyStruct"" access=""public"">
1657+
<struct name=""MyStruct"" access=""public"" unsafe=""true"">
16581658
<field name=""r"" access=""public"">
16591659
<type>double</type>
16601660
</field>

tests/ClangSharp.PInvokeGenerator.UnitTests/XmlCompatibleUnix/UnionDeclarationTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -846,7 +846,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
846846
var expectedOutputContents = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>
847847
<bindings>
848848
<namespace name=""ClangSharp.Test"">
849-
<struct name=""MyUnion"" access=""public"" layout=""Explicit"">
849+
<struct name=""MyUnion"" access=""public"" unsafe=""true"" layout=""Explicit"">
850850
<field name=""x"" access=""public"" offset=""0"">
851851
<type>int</type>
852852
</field>
@@ -892,7 +892,7 @@ protected override Task NestedAnonymousWithBitfieldTestImpl()
892892
<code>Anonymous.Anonymous.o0_b16_4 = value;</code>
893893
</set>
894894
</field>
895-
<struct name=""_Anonymous_e__Union"" access=""public"" layout=""Explicit"">
895+
<struct name=""_Anonymous_e__Union"" access=""public"" unsafe=""true"" layout=""Explicit"">
896896
<field name=""z"" access=""public"" offset=""0"">
897897
<type>int</type>
898898
</field>
@@ -1188,7 +1188,7 @@ protected override Task RemapNestedAnonymousTestImpl()
11881188
var expectedOutputContents = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes"" ?>
11891189
<bindings>
11901190
<namespace name=""ClangSharp.Test"">
1191-
<struct name=""MyUnion"" access=""public"" layout=""Explicit"">
1191+
<struct name=""MyUnion"" access=""public"" unsafe=""true"" layout=""Explicit"">
11921192
<field name=""r"" access=""public"" offset=""0"">
11931193
<type>double</type>
11941194
</field>

0 commit comments

Comments
 (0)