[Firm] Devirtualisierung und null Referenzen

Andreas Zwinkau zwinkau at kit.edu
Tue Apr 14 10:26:04 CEST 2015


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ein Student arbeitet gerade an einer Devirtualisierungs-Optimierung
via Rapid Type Analysis (RTA). Folgender Randfall:

class A {
    void foo() {}
}
A a = null;
a.foo();

Offensichtlich lässt sich der Aufruf von foo Devirtualisieren sagt die
RTA, weil es keine Unterklasse von A gibt. Aber: Damit verschwindet
der Segfault der hier passieren würde.

Darf man devirtualisieren oder nicht?

Von Sprachsemantik her ja. In C++ wäre es eh undefiniertes Verhalten.
In Java muss ich sowieso einen null pointer check einfügen. Soweit ich
weiß definiert keine Programmiersprache was bei null pointer
dereferenzierung passiert. Einzige Ausnahme: Java implementiert den
null pointer check via Segfault und signal handler.

Zu Debug und ähnliches Zwecken möchte man Segfaults erhalten, aber das
bedeutet man darf nur devirtualisieren, wenn man "this != null"
garantieren kann, also vermutlich so gut wie nie.

Meinungen?
- -- 
Andreas Zwinkau

 KIT  IPD Snelting
 Web: http://pp.ipd.kit.edu/personhp/andreas_zwinkau.php
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAEBAgAGBQJVLM8cAAoJEKm3M8a3pi2iLt4IAIe0mcMrumjpCgWf/gaucz1K
qZLooDqGdWs8x4xnGDGk9EO06re1bsGcSvf4+AHyVoQdNftxXvqrIVMUQ206sqHT
2IBgDjQWj0t5JHH7VjROEzkrx06EGTqkeVRLl4jo8r0K2NxXpe5jVBQo8vbklB0/
ECJpI0um4DdnIgvwT1cl0OjAs2VziXrYRPCpuGXaSG0WmyTphAgJMTpigHT/0gUm
oKY/tGyuJ0Ie03c5RfG4QXmhD7co4ApIxvFawTlfVYrfJETw0HaW2wpwzUmKCpjp
Ct0RSyO29qlQ3g2mQUcMwn3sucjReexzYo56E4tW9PRWFT/qBR+2+NIfpe6hA/g=
=wkVq
-----END PGP SIGNATURE-----



More information about the Firm mailing list