DefaultAugmentation on DU leads to badly generated type
- 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