Skip to content

Handle invalid descriptor proto#699

Merged
doriable merged 3 commits intomainfrom
handle-invalid-descriptor-proto
Apr 9, 2026
Merged

Handle invalid descriptor proto#699
doriable merged 3 commits intomainfrom
handle-invalid-descriptor-proto

Conversation

@doriable
Copy link
Copy Markdown
Member

@doriable doriable commented Apr 9, 2026

This change makes it so that instead of panicking (and
recovering with an ICE) for invalid descriptor.protos, the
compiler will instead stop lowering for all files, other than
descriptor.proto itself.

This makes it so that vendored descriptor.proto do not
result in ICE/crashing behaviour for consumers of the compiler.
However, I left a note that this is now behaviourally indistinguishable
from a bad descriptor.proto provided by the compiler.

Comment thread experimental/ir/lower_resolve.go
@doriable doriable merged commit 06fd9b5 into main Apr 9, 2026
6 checks passed
@doriable doriable deleted the handle-invalid-descriptor-proto branch April 9, 2026 20:38
emcfarlane added a commit that referenced this pull request Apr 17, 2026
Builds on #699, which replaced panics with a single valid flag. That
flag was too coarse: any missing symbol blocked lowering for every file
in the session, so a proto2/proto3 file against a pre-editions vendored
descriptor.proto would fail compilation even though it used nothing
editions-era.

Changes:

- Widen builtin:"optional" to cover everything introduced in editions
2023+: FeatureSet, all Feature* / *Features, OptionTargets,
UnverifiedLazy, EditionDefaults*, EditionSupport*, ExtnDecls*.
- Replace the valid flag with one error diagnostic per missing required
symbol, attached to descriptor.proto. Removes File.Lowered().
- IsClosedEnum / IsPacked / IsUnicode / populateJSONNames use syntax for
proto2/proto3 and only consult FeatureSet for editions.
- Augment the "cannot find message field" diagnostic when the name
matches a tagged-optional builtin, pointing at descriptor.proto and
explaining it's editions-era.

Four fixtures in experimental/ir/testdata/builtins/ cover broken,
vendored-proto3 (existing), vendored-proto3 with options, and
vendored-editions with unavailable feature.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants