From 1d2da668320f4c5ff070f65f50ca694bfc31cddb Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Wed, 20 Sep 2017 02:22:05 -0700 Subject: [PATCH] fix Issue 17843 - -betterC struct with field generates references to TypeInfo --- src/ddmd/clone.d | 5 +++-- src/ddmd/dsymbolsem.d | 9 ++++++--- test/runnable/{cassert.d => betterc.d} | 11 +++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) rename test/runnable/{cassert.d => betterc.d} (51%) diff --git a/src/ddmd/clone.d b/src/ddmd/clone.d index 469c4bee44a6..8d080f1b9596 100644 --- a/src/ddmd/clone.d +++ b/src/ddmd/clone.d @@ -695,8 +695,9 @@ private bool needToHash(StructDeclaration sd) } if (tv.isfloating()) { - // This is necessray for: - // 1. comparison of +0.0 and -0.0 should be true. + /* This is necessary because comparison of +0.0 and -0.0 should be true, + * i.e. not a bit compare. + */ goto Lneed; } if (tv.ty == Tarray) diff --git a/src/ddmd/dsymbolsem.d b/src/ddmd/dsymbolsem.d index 017de950a839..2cf3dd6008a8 100644 --- a/src/ddmd/dsymbolsem.d +++ b/src/ddmd/dsymbolsem.d @@ -5473,9 +5473,12 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor buildOpAssign(sd, sc2); buildOpEquals(sd, sc2); - sd.xeq = buildXopEquals(sd, sc2); - sd.xcmp = buildXopCmp(sd, sc2); - sd.xhash = buildXtoHash(sd, sc2); + if (global.params.useTypeInfo) // these functions are used for TypeInfo + { + sd.xeq = buildXopEquals(sd, sc2); + sd.xcmp = buildXopCmp(sd, sc2); + sd.xhash = buildXtoHash(sd, sc2); + } sd.inv = buildInv(sd, sc2); diff --git a/test/runnable/cassert.d b/test/runnable/betterc.d similarity index 51% rename from test/runnable/cassert.d rename to test/runnable/betterc.d index 8c7675084957..78e9b9a28709 100644 --- a/test/runnable/cassert.d +++ b/test/runnable/betterc.d @@ -10,6 +10,17 @@ void test(int ij) assert(ij,"it is not zero"); } +/*******************************************/ +// https://issues.dlang.org/show_bug.cgi?id=17843 + +struct S +{ + double d = 0.0; + int[] x; +} + +/*******************************************/ + extern (C) int main() { test(1);