dotnet / dotnet/fsharp

DefaultAugmentation on DU leads to badly generated type

Aperta
#9,178 20 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Area-Compiler-Checking Bug Impact-Low
Lingua principale
F#
Stelle
4.3k
Fork
876
Merge medio
5g 9h
PR unite (30g)
153

Descrizione

I fell into a pit. exp:
Writting a DU in **Liberary1**:
```
[] // focus on it
type Bar =
| Test1 of int
| Test 2

module Bar =
let inline foo x = // focus on "inline"
match x with
| Test1 x -> x
| Test2 -> 0
```
and then write code in **Liberary2**
```
let foo2 x = Bar.foo x
```
As `foo2` is called, some exception is happend.
Because `DefaultAugmentation false` don't generate property `Tag`, the inline function `foo` use `_tag` for judgment. And when we using `Bar.foo` in another liberary, the code inline to `foo2`. It visit `_tag`, bug it's an internal value...

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia riproducendo l’esempio con due librerie: definisci DU e inline Bar.foo in Library1 con DefaultAugmentation false, quindi chiama Bar.foo da foo2 in Library2. Esamina in che modo l’inline match accede al tag DU attraverso il confine tra le librerie. Il lavoro è completato quando la chiamata riprodotta non genera più un’eccezione e l’accesso al tipo generato è valido al di fuori di Library1.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
fsharp
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.