DDP-Projekt / Kompilierer

Der Kompilierer der Deutschen Programmiersprache
https://ddp.le0n.dev/Spielplatz
MIT License
138 stars 4 forks source link

Multiple Definition Error mit öffentlichen globalen Variablen mit demselben Namen #70

Closed bafto closed 3 months ago

bafto commented 3 months ago
[test1.ddp]
Die öffentliche Zahl z ist 22.
[test2.ddp]
Die öffentliche Zahk z ist 23.
Die öffentliche Zahl test ist 0.
[test.ddp]
Binde "test1" ein.
Binde test aus "test2" ein.
Binde "Duden/Ausgabe" ein.

Schreibe z auf eine Zeile.
$ kddp kompiliere test.ddp
error: Linking globals named 'z': symbol multiply defined!

Der Fehler entsteht dadurch, dass alle öffentlichen Symbole (Funktionen und Variablen) den LLVM Linkage Typ external haben, und dadurch in der Symbol-Table der generierten objekt Datei als globale Symbole sichtbar sind.

Für Funktionen ist das nur nötig, wenn es externe Funktionen sind, die einer C-Definition entsprechen müssen.

Die Lösungen für das Problem wäre es name-mangling zu betreiben, und jedem (öffentlichen) Symbol ein Module-Spezifisches Prefix/Suffix anzuhängen. Für externe Funktionen würde das nicht gelten. Noch gibt es in DDP keine "externen" Variablen, falls wir das einführen wäre das dort ebenfalls nicht der Fall.

bafto commented 3 months ago

fixed in https://github.com/DDP-Projekt/Kompilierer/pull/71