re PR d/89016 (ICE in ArrayLiteralExp::toStringExp, at d/dmd/expression.c:3873)
authorIain Buclaw <ibuclaw@gcc.gnu.org>
Sun, 10 Mar 2019 17:25:18 +0000 (17:25 +0000)
committerIain Buclaw <ibuclaw@gcc.gnu.org>
Sun, 10 Mar 2019 17:25:18 +0000 (17:25 +0000)
    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

gcc/d/dmd/MERGE
gcc/d/dmd/dimport.c
gcc/testsuite/gdc.test/fail_compilation/fail19609.d
gcc/testsuite/gdc.test/fail_compilation/imports/fail19609d.d [new file with mode: 0644]

index 98bf8254554091b0bfd32a3958465c819a183372..313748f70aeee8102d7724ddad192c543a8861d2 100644 (file)
@@ -1,4 +1,4 @@
-0fc786f4908aa6bdd4220af87995333b1f24c3d7
+da26db81943952c7e35dab98650df589ec122485
 
 The first line of this file holds the git revision number of the last
 merge done from the dlang/dmd repository.
index cd2c5b22a74ade82136bb08cd91585a7f6e1a619..3d899f09b521c40169c13a8ca204031a5262fe25 100644 (file)
@@ -23,8 +23,6 @@
 #include "attrib.h"
 #include "hdrgen.h"
 
-StringExp *semanticString(Scope *sc, Expression *exp, const char *s);
-
 /********************************* Import ****************************/
 
 Import::Import(Loc loc, Identifiers *packages, Identifier *id, Identifier *aliasId,
@@ -175,19 +173,17 @@ void Import::importAll(Scope *sc)
         load(sc);
         if (mod)                // if successfully loaded module
         {
+            mod->importAll(NULL);
+
             if (mod->md && mod->md->isdeprecated)
             {
                 Expression *msg = mod->md->msg;
-                if (msg)
-                    msg = semanticString(sc, msg, "deprecation message");
                 if (StringExp *se = msg ? msg->toStringExp() : NULL)
                     mod->deprecation(loc, "is deprecated - %s", se->string);
                 else
                     mod->deprecation(loc, "is deprecated");
             }
 
-            mod->importAll(NULL);
-
             if (sc->explicitProtection)
                 protection = sc->protection;
             if (!isstatic && !aliasId && !names.dim)
index 64d080ac5d0bb379b9efbbb0923e1cacd7c80aac..26ef57693b7f8199044e87807d25c219e60a160f 100644 (file)
@@ -3,16 +3,17 @@
 TEST_OUTPUT
 ---
 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/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/fail19609.d(15): Deprecation: module `imports.fail19609a` is deprecated
 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/fail19609.d(18): 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/fail19609.d(17): Deprecation: module `imports.fail19609c` is deprecated
+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.fail19609b;
 import imports.fail19609c;
+enum msg = "You should not be able to see me";
+import imports.fail19609d;
diff --git a/gcc/testsuite/gdc.test/fail_compilation/imports/fail19609d.d b/gcc/testsuite/gdc.test/fail_compilation/imports/fail19609d.d
new file mode 100644 (file)
index 0000000..0955ca4
--- /dev/null
@@ -0,0 +1,2 @@
+deprecated(msg) module imports.fail19609d;
+enum msg = "You won't see this either";