Commit 42a84c28 by Iain Buclaw

re PR d/89016 (ICE in ArrayLiteralExp::toStringExp, at d/dmd/expression.c:3873)

    PR d/89016
d/dmd: Merge upstream dmd da26db819

Backports supplementary fix for ICE on importing deprecated modules.

Updates https://gcc.gnu.org/PR89016

Reviewed-on: https://github.com/dlang/dmd/pull/9436

From-SVN: r269560
parent 055c7e41
0fc786f4908aa6bdd4220af87995333b1f24c3d7 da26db81943952c7e35dab98650df589ec122485
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository. merge done from the dlang/dmd repository.
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include "attrib.h" #include "attrib.h"
#include "hdrgen.h" #include "hdrgen.h"
StringExp *semanticString(Scope *sc, Expression *exp, const char *s);
/********************************* Import ****************************/ /********************************* Import ****************************/
Import::Import(Loc loc, Identifiers *packages, Identifier *id, Identifier *aliasId, Import::Import(Loc loc, Identifiers *packages, Identifier *id, Identifier *aliasId,
...@@ -175,19 +173,17 @@ void Import::importAll(Scope *sc) ...@@ -175,19 +173,17 @@ void Import::importAll(Scope *sc)
load(sc); load(sc);
if (mod) // if successfully loaded module if (mod) // if successfully loaded module
{ {
mod->importAll(NULL);
if (mod->md && mod->md->isdeprecated) if (mod->md && mod->md->isdeprecated)
{ {
Expression *msg = mod->md->msg; Expression *msg = mod->md->msg;
if (msg)
msg = semanticString(sc, msg, "deprecation message");
if (StringExp *se = msg ? msg->toStringExp() : NULL) if (StringExp *se = msg ? msg->toStringExp() : NULL)
mod->deprecation(loc, "is deprecated - %s", se->string); mod->deprecation(loc, "is deprecated - %s", se->string);
else else
mod->deprecation(loc, "is deprecated"); mod->deprecation(loc, "is deprecated");
} }
mod->importAll(NULL);
if (sc->explicitProtection) if (sc->explicitProtection)
protection = sc->protection; protection = sc->protection;
if (!isstatic && !aliasId && !names.dim) if (!isstatic && !aliasId && !names.dim)
......
...@@ -3,16 +3,17 @@ ...@@ -3,16 +3,17 @@
TEST_OUTPUT TEST_OUTPUT
--- ---
fail_compilation/imports/fail19609a.d(1): Error: `string` expected for deprecation message, not `([""])` of type `string[]` fail_compilation/imports/fail19609a.d(1): Error: `string` expected for deprecation message, not `([""])` of type `string[]`
fail_compilation/fail19609.d(16): Deprecation: module `imports.fail19609a` is deprecated fail_compilation/fail19609.d(15): Deprecation: module `imports.fail19609a` is deprecated
fail_compilation/imports/fail19609a.d(1): Error: `string` expected for deprecation message, not `([""])` of type `string[]`
fail_compilation/imports/fail19609b.d(1): Error: `string` expected for deprecation message, not `([1])` of type `int[]`
fail_compilation/fail19609.d(17): Deprecation: module `imports.fail19609b` is deprecated
fail_compilation/imports/fail19609b.d(1): Error: `string` expected for deprecation message, not `([1])` of type `int[]` fail_compilation/imports/fail19609b.d(1): Error: `string` expected for deprecation message, not `([1])` of type `int[]`
fail_compilation/fail19609.d(16): Deprecation: module `imports.fail19609b` is deprecated
fail_compilation/imports/fail19609c.d(1): Error: `string` expected for deprecation message, not `(123.4F)` of type `float` fail_compilation/imports/fail19609c.d(1): Error: `string` expected for deprecation message, not `(123.4F)` of type `float`
fail_compilation/fail19609.d(18): Deprecation: module `imports.fail19609c` is deprecated fail_compilation/fail19609.d(17): Deprecation: module `imports.fail19609c` is deprecated
fail_compilation/imports/fail19609c.d(1): Error: `string` expected for deprecation message, not `(123.4F)` of type `float` fail_compilation/imports/fail19609d.d(1): Error: undefined identifier `msg`
fail_compilation/fail19609.d(19): Deprecation: module `imports.fail19609d` is deprecated
--- ---
*/ */
import imports.fail19609a; import imports.fail19609a;
import imports.fail19609b; import imports.fail19609b;
import imports.fail19609c; import imports.fail19609c;
enum msg = "You should not be able to see me";
import imports.fail19609d;
deprecated(msg) module imports.fail19609d;
enum msg = "You won't see this either";
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment