From 72b6a5781f84693c45a40347d10a512f337029ee Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Sun, 25 Jun 2017 10:34:28 +0200 Subject: [PATCH 1/5] Revert "Merge pull request #6001 from JohanEngelen/hiddenvirtuals" because it introduced a regression, see https://issues.dlang.org/show_bug.cgi?id=17548 This reverts commit 60f622ff1b95cb2f9236cda0ed886aa7ea492384, reversing changes made to 949281490e963178dd102ce99fccccfd6494975c. --- src/ddmd/dimport.d | 6 +++--- src/ddmd/dmodule.d | 8 ++++---- src/ddmd/expression.d | 2 +- src/ddmd/mars.d | 12 ++++++------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/ddmd/dimport.d b/src/ddmd/dimport.d index bff7c34bec76..11a1a9595fe9 100644 --- a/src/ddmd/dimport.d +++ b/src/ddmd/dimport.d @@ -292,7 +292,7 @@ extern (C++) final class Import : Dsymbol scopesym.addAccessiblePackage(mod, protection); // d } - mod.semantic(null); + mod.semantic(); if (mod.needmoduleinfo) { //printf("module4 %s because of %s\n", sc.module.toChars(), mod.toChars()); @@ -409,7 +409,7 @@ extern (C++) final class Import : Dsymbol //printf("Import::semantic2('%s')\n", toChars()); if (mod) { - mod.semantic2(null); + mod.semantic2(); if (mod.needmoduleinfo) { //printf("module5 %s because of %s\n", sc.module.toChars(), mod.toChars()); @@ -476,7 +476,7 @@ extern (C++) final class Import : Dsymbol { load(null); mod.importAll(null); - mod.semantic(null); + mod.semantic(); } // Forward it to the package/module return pkg.search(loc, ident, flags); diff --git a/src/ddmd/dmodule.d b/src/ddmd/dmodule.d index 87f7c4102368..b9daf8884341 100644 --- a/src/ddmd/dmodule.d +++ b/src/ddmd/dmodule.d @@ -246,7 +246,7 @@ extern (C++) class Package : ScopeDsymbol return isAncestorPackageOf(pkg.parent.isPackage()); } - override void semantic(Scope* sc) + override final void semantic(Scope* sc) { if (semanticRun < PASSsemanticdone) semanticRun = PASSsemanticdone; @@ -1047,7 +1047,7 @@ extern (C++) final class Module : Package } // semantic analysis - override void semantic(Scope*) + void semantic() { if (semanticRun != PASSinit) return; @@ -1084,7 +1084,7 @@ extern (C++) final class Module : Package } // pass 2 semantic analysis - override void semantic2(Scope*) + void semantic2() { //printf("Module::semantic2('%s'): parent = %p\n", toChars(), parent); if (semanticRun != PASSsemanticdone) // semantic() not completed yet - could be recursive call @@ -1112,7 +1112,7 @@ extern (C++) final class Module : Package } // pass 3 semantic analysis - override void semantic3(Scope*) + void semantic3() { //printf("Module::semantic3('%s'): parent = %p\n", toChars(), parent); if (semanticRun != PASSsemantic2done) diff --git a/src/ddmd/expression.d b/src/ddmd/expression.d index a152bd35e05a..53afc07c3c72 100644 --- a/src/ddmd/expression.d +++ b/src/ddmd/expression.d @@ -14912,7 +14912,7 @@ extern (C++) Module loadStdMath() if (s.mod) { s.mod.importAll(null); - s.mod.semantic(null); + s.mod.semantic(); } impStdMath = s; } diff --git a/src/ddmd/mars.d b/src/ddmd/mars.d index ca711ed9a32e..e06a50ce8575 100644 --- a/src/ddmd/mars.d +++ b/src/ddmd/mars.d @@ -237,9 +237,9 @@ extern (C++) void genCmain(Scope* sc) global.params.verbose = false; m.importedFrom = m; m.importAll(null); - m.semantic(null); - m.semantic2(null); - m.semantic3(null); + m.semantic(); + m.semantic2(); + m.semantic3(); global.params.verbose = v; entrypoint = m; rootHasMain = sc._module; @@ -1455,7 +1455,7 @@ Language changes listed by -transition=id: Module m = modules[i]; if (global.params.verbose) fprintf(global.stdmsg, "semantic %s\n", m.toChars()); - m.semantic(null); + m.semantic(); } //if (global.errors) // fatal(); @@ -1477,7 +1477,7 @@ Language changes listed by -transition=id: Module m = modules[i]; if (global.params.verbose) fprintf(global.stdmsg, "semantic2 %s\n", m.toChars()); - m.semantic2(null); + m.semantic2(); } Module.runDeferredSemantic2(); if (global.errors) @@ -1489,7 +1489,7 @@ Language changes listed by -transition=id: Module m = modules[i]; if (global.params.verbose) fprintf(global.stdmsg, "semantic3 %s\n", m.toChars()); - m.semantic3(null); + m.semantic3(); } Module.runDeferredSemantic3(); if (global.errors) From 5f6f99df05ef00b43312ae396ce0bfd2a2ab0386 Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Sun, 25 Jun 2017 10:38:11 +0200 Subject: [PATCH 2/5] Revert "Merge pull request #6038 from JohanEngelen/virtuals2" as part of reverting #6001 This reverts commit 40fc71618fbc542bba0234f86a513728cc3c3293, reversing changes made to 3cec8aa7e59212bf366598df0e5fabbe149092ad. --- src/ddmd/module.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ddmd/module.h b/src/ddmd/module.h index 780850218259..e5d0f178d2bc 100644 --- a/src/ddmd/module.h +++ b/src/ddmd/module.h @@ -127,9 +127,9 @@ class Module : public Package bool read(Loc loc); // read file, returns 'true' if succeed, 'false' otherwise. Module *parse(); // syntactic parse void importAll(Scope *sc); - void semantic(Scope *); // semantic analysis - void semantic2(Scope *); // pass 2 semantic analysis - void semantic3(Scope *); // pass 3 semantic analysis + void semantic(); // semantic analysis + void semantic2(); // pass 2 semantic analysis + void semantic3(); // pass 3 semantic analysis int needModuleInfo(); Dsymbol *search(Loc loc, Identifier *ident, int flags = SearchLocalsOnly); bool isPackageAccessible(Package *p, Prot protection, int flags = 0); From 19fb627bc3987d483ebf42c42401ce085479e02a Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Sun, 25 Jun 2017 10:45:19 +0200 Subject: [PATCH 3/5] Fix compile error after reverting #6001 --- src/ddmd/dmodule.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ddmd/dmodule.d b/src/ddmd/dmodule.d index b9daf8884341..f79e6f4c08f9 100644 --- a/src/ddmd/dmodule.d +++ b/src/ddmd/dmodule.d @@ -121,7 +121,7 @@ void semantic3OnDependencies(Module m) if (m.semanticRun > PASSsemantic3) return; - m.semantic3(null); + m.semantic3(); foreach (i; 1 .. m.aimports.dim) semantic3OnDependencies(m.aimports[i]); From 8bb3698a996d7ce15d55822b39c92616bb9642ac Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Sun, 25 Jun 2017 10:54:31 +0200 Subject: [PATCH 4/5] Add testcase for issue 17548. https://issues.dlang.org/show_bug.cgi?id=17548 --- test/compilable/imports/fwdref2_test17548.d | 8 ++++++++ test/compilable/test17548.d | 12 ++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 test/compilable/imports/fwdref2_test17548.d create mode 100644 test/compilable/test17548.d diff --git a/test/compilable/imports/fwdref2_test17548.d b/test/compilable/imports/fwdref2_test17548.d new file mode 100644 index 000000000000..880270d09086 --- /dev/null +++ b/test/compilable/imports/fwdref2_test17548.d @@ -0,0 +1,8 @@ +module fwdref2_test17548; + +import test17548; + +struct S2 { + void bar(int arg = .test17548.cnst) {} + S1 s; +} diff --git a/test/compilable/test17548.d b/test/compilable/test17548.d new file mode 100644 index 000000000000..67b32d7a3ad9 --- /dev/null +++ b/test/compilable/test17548.d @@ -0,0 +1,12 @@ +// REQUIRED_ARGS: -c + +module test17548; + +struct S1 { + void foo(scope S2 arg) {} + int myField; +} + +enum cnst = 4321; + +import imports.fwdref2_test17548; From e43773ff757fd9fc5147f5125dbaa1cb542ab3fe Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Sun, 25 Jun 2017 11:07:58 +0200 Subject: [PATCH 5/5] Rename Module.semantic* to Module.doSemanticPass*, such that it is clear that they are not meant to override DSymbol.semantic*. Rework of #6001 which caused regression issue 17548. --- src/ddmd/dimport.d | 6 +++--- src/ddmd/dmodule.d | 20 ++++++++++---------- src/ddmd/expression.d | 2 +- src/ddmd/mars.d | 18 +++++++++--------- src/ddmd/module.h | 6 +++--- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/ddmd/dimport.d b/src/ddmd/dimport.d index 11a1a9595fe9..42fed347d30e 100644 --- a/src/ddmd/dimport.d +++ b/src/ddmd/dimport.d @@ -292,7 +292,7 @@ extern (C++) final class Import : Dsymbol scopesym.addAccessiblePackage(mod, protection); // d } - mod.semantic(); + mod.doSemanticPass1(); if (mod.needmoduleinfo) { //printf("module4 %s because of %s\n", sc.module.toChars(), mod.toChars()); @@ -409,7 +409,7 @@ extern (C++) final class Import : Dsymbol //printf("Import::semantic2('%s')\n", toChars()); if (mod) { - mod.semantic2(); + mod.doSemanticPass2(); if (mod.needmoduleinfo) { //printf("module5 %s because of %s\n", sc.module.toChars(), mod.toChars()); @@ -476,7 +476,7 @@ extern (C++) final class Import : Dsymbol { load(null); mod.importAll(null); - mod.semantic(); + mod.doSemanticPass1(); } // Forward it to the package/module return pkg.search(loc, ident, flags); diff --git a/src/ddmd/dmodule.d b/src/ddmd/dmodule.d index f79e6f4c08f9..9951faf0fd7b 100644 --- a/src/ddmd/dmodule.d +++ b/src/ddmd/dmodule.d @@ -112,7 +112,7 @@ extern (C++) const(char)* lookForSourceFile(const(char)** path, const(char)* fil return null; } -// function used to call semantic3 on a module's dependencies +// function used to call doSemanticPass3 on a module's dependencies void semantic3OnDependencies(Module m) { if (!m) @@ -121,7 +121,7 @@ void semantic3OnDependencies(Module m) if (m.semanticRun > PASSsemantic3) return; - m.semantic3(); + m.doSemanticPass3(); foreach (i; 1 .. m.aimports.dim) semantic3OnDependencies(m.aimports[i]); @@ -1047,11 +1047,11 @@ extern (C++) final class Module : Package } // semantic analysis - void semantic() + void doSemanticPass1() { if (semanticRun != PASSinit) return; - //printf("+Module::semantic(this = %p, '%s'): parent = %p\n", this, toChars(), parent); + //printf("+Module::doSemanticPass1(this = %p, '%s'): parent = %p\n", this, toChars(), parent); semanticRun = PASSsemantic; // Note that modules get their own scope, from scratch. // This is so regardless of where in the syntax a module @@ -1080,13 +1080,13 @@ extern (C++) final class Module : Package sc.pop(); // 2 pops because Scope::createGlobal() created 2 } semanticRun = PASSsemanticdone; - //printf("-Module::semantic(this = %p, '%s'): parent = %p\n", this, toChars(), parent); + //printf("-Module::doSemanticPass1(this = %p, '%s'): parent = %p\n", this, toChars(), parent); } // pass 2 semantic analysis - void semantic2() + void doSemanticPass2() { - //printf("Module::semantic2('%s'): parent = %p\n", toChars(), parent); + //printf("Module::doSemanticPass2('%s'): parent = %p\n", toChars(), parent); if (semanticRun != PASSsemanticdone) // semantic() not completed yet - could be recursive call return; semanticRun = PASSsemantic2; @@ -1108,13 +1108,13 @@ extern (C++) final class Module : Package sc = sc.pop(); sc.pop(); semanticRun = PASSsemantic2done; - //printf("-Module::semantic2('%s'): parent = %p\n", toChars(), parent); + //printf("-Module::doSemanticPass2('%s'): parent = %p\n", toChars(), parent); } // pass 3 semantic analysis - void semantic3() + void doSemanticPass3() { - //printf("Module::semantic3('%s'): parent = %p\n", toChars(), parent); + //printf("Module::doSemanticPass3('%s'): parent = %p\n", toChars(), parent); if (semanticRun != PASSsemantic2done) return; semanticRun = PASSsemantic3; diff --git a/src/ddmd/expression.d b/src/ddmd/expression.d index 53afc07c3c72..c19d16a97553 100644 --- a/src/ddmd/expression.d +++ b/src/ddmd/expression.d @@ -14912,7 +14912,7 @@ extern (C++) Module loadStdMath() if (s.mod) { s.mod.importAll(null); - s.mod.semantic(); + s.mod.doSemanticPass1(); } impStdMath = s; } diff --git a/src/ddmd/mars.d b/src/ddmd/mars.d index e06a50ce8575..59d815847d88 100644 --- a/src/ddmd/mars.d +++ b/src/ddmd/mars.d @@ -237,9 +237,9 @@ extern (C++) void genCmain(Scope* sc) global.params.verbose = false; m.importedFrom = m; m.importAll(null); - m.semantic(); - m.semantic2(); - m.semantic3(); + m.doSemanticPass1(); + m.doSemanticPass2(); + m.doSemanticPass3(); global.params.verbose = v; entrypoint = m; rootHasMain = sc._module; @@ -1454,8 +1454,8 @@ Language changes listed by -transition=id: { Module m = modules[i]; if (global.params.verbose) - fprintf(global.stdmsg, "semantic %s\n", m.toChars()); - m.semantic(); + fprintf(global.stdmsg, "doSemanticPass1 %s\n", m.toChars()); + m.doSemanticPass1(); } //if (global.errors) // fatal(); @@ -1476,8 +1476,8 @@ Language changes listed by -transition=id: { Module m = modules[i]; if (global.params.verbose) - fprintf(global.stdmsg, "semantic2 %s\n", m.toChars()); - m.semantic2(); + fprintf(global.stdmsg, "doSemanticPass2 %s\n", m.toChars()); + m.doSemanticPass2(); } Module.runDeferredSemantic2(); if (global.errors) @@ -1488,8 +1488,8 @@ Language changes listed by -transition=id: { Module m = modules[i]; if (global.params.verbose) - fprintf(global.stdmsg, "semantic3 %s\n", m.toChars()); - m.semantic3(); + fprintf(global.stdmsg, "doSemanticPass3 %s\n", m.toChars()); + m.doSemanticPass3(); } Module.runDeferredSemantic3(); if (global.errors) diff --git a/src/ddmd/module.h b/src/ddmd/module.h index e5d0f178d2bc..5fa522d44a49 100644 --- a/src/ddmd/module.h +++ b/src/ddmd/module.h @@ -127,9 +127,9 @@ class Module : public Package bool read(Loc loc); // read file, returns 'true' if succeed, 'false' otherwise. Module *parse(); // syntactic parse void importAll(Scope *sc); - void semantic(); // semantic analysis - void semantic2(); // pass 2 semantic analysis - void semantic3(); // pass 3 semantic analysis + void doSemanticPass1(); // pass 1 semantic analysis + void doSemanticPass2(); // pass 2 semantic analysis + void doSemanticPass3(); // pass 3 semantic analysis int needModuleInfo(); Dsymbol *search(Loc loc, Identifier *ident, int flags = SearchLocalsOnly); bool isPackageAccessible(Package *p, Prot protection, int flags = 0);