fix(cl): avoid panicking on a BlockPointer member during union accessor generation
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 72/100
Direzione di ricerca
Start with genUnionAccessor and trace its calls through toType and toTypeEx, using the glob_t anonymous union and source/llcppg.cfg configuration as the reproduction. Run GOOS=darwin GOARCH=arm64 llcppg ./generated ./source with the macOS headers in source/darwin-arm64/include. Done means generation does not panic and clearly reports the unsupported Blocks callback without presenting the partially emitted record as complete or treating it as an ordinary C function pointer.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
A Blocks callback member classified as unsupported/quietly ignored by toTypeEx becomes a hard panic when the same conversion is requested by a union accessor. The macOS glob_t header triggers this path.
Reproduction
Use a source Go module requiring github.com/goplus/lib v0.7.0, with this configuration in source/llcppg.cfg:
{
"Name": "libc",
"Language": "c",
"Dir": "$GOOS-$GOARCH/include",
"Files": [
"glob.h"
],
"FailFast": 0,
"IgnoreInline": true
}
Put the selected inputs under source/darwin-arm64/include, with the macOS 14.0 SDK headers available there where included. Leave Stdlib unset, and run:
GOOS=darwin GOARCH=arm64 llcppg ./generated ./source
The SDK's glob_t contains this anonymous union when __BLOCKS__ is defined by the selected target:
union {
int (*gl_errfunc)(const char *, int);
int (^gl_errblk)(const char *, int);
};
Actual result
Generation exits 2:
panic: unsupported type - int (^)(const char *, int)
The stack is genUnionAccessor -> toType -> toTypeEx. toTypeEx explicitly sets featQuietIgnore for Type_BlockPointer, but toType turns any ignore feature into a panic. genUnionAccessor uses this strict entry point without handling the unsupported member result.
Expected behavior
Handle this unsupported type deliberately and report its impact on the generated binding without panicking. Do not silently represent a Blocks callback as an ordinary C function pointer or claim that a partially emitted record is complete. Implementing full Blocks ABI support is a separate decision.
Merged #874 introduced the unsupported-type handling; it does not cover this union-accessor crash. This is also distinct from #1032's missing registration of named records.
Environment
Reproduced on macOS/arm64 with LLVM/libclang 22.1.8, LLGo 1.0.9 and github.com/goplus/lib v0.7.0. The relevant installed generator sources were checked byte-for-byte against current main 90bd72cf. SDK-dependent cases use macOS 14.0 headers. These are generation-stage results, not cross-platform or ABI certification.
- Lingua principale
- Go
- Stelle
- 40
- Fork
- 13
- Merge medio
- 2h 4m
- PR unite (30g)
- 143
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di goplus/llcppg
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 6/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 64/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
goplus/llcppg#1136 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di goplus/llcppg
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
Schema validation is skipped when a transaction is invoked with a lowercase first letterForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
-
cmd/ebitenmobile: multi-language bindings run the complete generator twiceForse già presa @kumagi l’ha presa oggi. Apertaos:macos performance
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
hajimehoshi/ebiten#4011 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
agent-butler-finding chore
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
jordansmall/spindrift#6318 ·
I maintainer di solito rispondono entro 1 giorno