digitalmars.D.bugs - -inline calling wrong virtual function!
- Vathix (36/36) May 21 2005 class BaseFoo
- Thomas Kuehne (13/49) Jun 01 2005 -----BEGIN PGP SIGNED MESSAGE-----
class BaseFoo { protected void stuff() { printf("BaseFoo.stuff()\n"); } } class DerivedFoo: BaseFoo { protected override void stuff() { printf("DerivedFoo.stuff()\n"); } package final void baseStuff() { super.stuff(); } } int main() { DerivedFoo f; f = new DerivedFoo; f.stuff(); // Should print "DerivedFoo.stuff()". f.baseStuff(); // Should print "BaseFoo.stuff()". return 0; } Command "dmd test" shows this [correct] output: DerivedFoo.stuff() BaseFoo.stuff() Command "dmd -inline test" shows this incorrect output: DerivedFoo.stuff() DerivedFoo.stuff() A workaround is to insert some more code in baseStuff that won't get optimized away, such as void delegate() foo = &stuff; so that it won't get inlined.
May 21 2005
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Vathix schrieb am Sat, 21 May 2005 06:59:58 -0400:class BaseFoo { protected void stuff() { printf("BaseFoo.stuff()\n"); } } class DerivedFoo: BaseFoo { protected override void stuff() { printf("DerivedFoo.stuff()\n"); } package final void baseStuff() { super.stuff(); } } int main() { DerivedFoo f; f = new DerivedFoo; f.stuff(); // Should print "DerivedFoo.stuff()". f.baseStuff(); // Should print "BaseFoo.stuff()". return 0; } Command "dmd test" shows this [correct] output: DerivedFoo.stuff() BaseFoo.stuff() Command "dmd -inline test" shows this incorrect output: DerivedFoo.stuff() DerivedFoo.stuff() A workaround is to insert some more code in baseStuff that won't get optimized away, such as void delegate() foo = &stuff; so that it won't get inlined.Added to DStress as http://dstress.kuehne.cn/run/i/inline_10_A.d http://dstress.kuehne.cn/run/i/inline_10_B.d http://dstress.kuehne.cn/run/i/inline_10_C.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCnb+F3w+/yD4P9tIRAjoyAKCNCZ2K3TC+ryMz+rmw+OIS5KmpygCdEuFP HJEmjWeXuueLIa4J3jLyrK8= =XzVe -----END PGP SIGNATURE-----
Jun 01 2005