diff --git a/src/statement.d b/src/statement.d index bde05953fd73..0bda2fce51c9 100644 --- a/src/statement.d +++ b/src/statement.d @@ -192,7 +192,9 @@ public: // Same as semanticNoScope(), but do create a new scope final Statement semanticScope(Scope* sc, Statement sbreak, Statement scontinue) { - Scope* scd = sc.push(); + auto sym = new ScopeDsymbol(); + sym.parent = sc.scopesym; + Scope* scd = sc.push(sym); if (sbreak) scd.sbreak = sbreak; if (scontinue) diff --git a/test/compilable/imports/test16348.d b/test/compilable/imports/test16348.d new file mode 100644 index 000000000000..c9f871cc43a3 --- /dev/null +++ b/test/compilable/imports/test16348.d @@ -0,0 +1,6 @@ +module mypackage.bar; + +package bool bar() +{ + return false; +} diff --git a/test/compilable/test16348.d b/test/compilable/test16348.d new file mode 100644 index 000000000000..4efe24f11907 --- /dev/null +++ b/test/compilable/test16348.d @@ -0,0 +1,13 @@ +// EXTRA_SOURCES: imports/test16348.d +module mypackage.foo; + +void bug() +{ + // removing the if-else also removes the segfault + if (true) {} + else + { + import mypackage.bar; + auto b = bar(); + } +}