This repository was archived by the owner on Feb 25, 2025. It is now read-only.
[Embedder API] Lock nested structs for ABI stability#40069
Merged
auto-submit[bot] merged 1 commit intoflutter:mainfrom Mar 9, 2023
Merged
[Embedder API] Lock nested structs for ABI stability#40069auto-submit[bot] merged 1 commit intoflutter:mainfrom
auto-submit[bot] merged 1 commit intoflutter:mainfrom
Conversation
yaakovschectman
approved these changes
Mar 6, 2023
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/flutter
that referenced
this pull request
Mar 9, 2023
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of flutter/flutter#121176
Fixes flutter/flutter#121347
Background
Imagine the following change:
Bad change...
typedef struct { /// The size of this struct. Must be sizeof(A). size_t struct_size; int one; + int two; } A; typedef struct { /// The size of this struct. Must be sizeof(B). size_t struct_size; A a; int three; } B;Adding a member to struct
Awould change the memory layout of structB; this breaks ABI compatibility. The structs'struct_sizedoes not protect against this ABI break. Instead, structBshould've nested structAby pointer:Good change...
typedef struct { /// The size of this struct. Must be sizeof(A). size_t struct_size; int one; + int two; } A; typedef struct { /// The size of this struct. Must be sizeof(B). size_t struct_size; A* a; int three; } B;This problem affects the following structs:
FlutterTransformation- Would breakFlutterSemanticsNodehereFlutterRect- Would breakFlutterSemanticsNodehere. Also,FlutterDamageis affected by the "array of structs" problem hereFlutterPointwould breakFlutterLayerhereFlutterDamage- Would breakFlutterPresentInfohereI did not include the following nested structs as adding members to them does not seem to introduce any ABI issues:
FlutterSizeFlutterUIntSizeFlutterRoundedRectPre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.