diff options
-rw-r--r-- | gcc/d/dmd/MERGE | 2 | ||||
-rw-r--r-- | gcc/d/dmd/dclass.c | 1 | ||||
-rw-r--r-- | gcc/d/dmd/expressionsem.c | 1 | ||||
-rw-r--r-- | gcc/d/dmd/module.h | 1 | ||||
-rw-r--r-- | gcc/testsuite/gdc.test/compilable/imports/pr9471a.d | 2 | ||||
-rw-r--r-- | gcc/testsuite/gdc.test/compilable/imports/pr9471b.d | 5 | ||||
-rw-r--r-- | gcc/testsuite/gdc.test/compilable/imports/pr9471c.d | 18 | ||||
-rw-r--r-- | gcc/testsuite/gdc.test/compilable/imports/pr9471d.d | 1 | ||||
-rw-r--r-- | gcc/testsuite/gdc.test/compilable/pr9471.d | 6 | ||||
-rw-r--r-- | gcc/testsuite/gdc.test/runnable/traits.d | 4 |
10 files changed, 37 insertions, 4 deletions
diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index 6cbc4e3..a421448 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -b061bd744cb4eb94a7118581387d988d4ec25e97 +d1a606599e7c2bea8fda8bf5e3ddceb486ae69ac The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/dclass.c b/gcc/d/dmd/dclass.c index bbe2f8a..4609d6a 100644 --- a/gcc/d/dmd/dclass.c +++ b/gcc/d/dmd/dclass.c @@ -395,7 +395,6 @@ void ClassDeclaration::semantic(Scope *sc) } else if (symtab && !scx) { - semanticRun = PASSsemanticdone; return; } semanticRun = PASSsemantic; diff --git a/gcc/d/dmd/expressionsem.c b/gcc/d/dmd/expressionsem.c index 781bd3e..fed36cf 100644 --- a/gcc/d/dmd/expressionsem.c +++ b/gcc/d/dmd/expressionsem.c @@ -2370,6 +2370,7 @@ public: return setError(); } + sc->_module->contentImportedFiles.push(name); if (global.params.verbose) message("file %.*s\t(%s)", (int)se->len, (char *)se->string, name); if (global.params.moduleDeps != NULL) diff --git a/gcc/d/dmd/module.h b/gcc/d/dmd/module.h index 4a20356..f4253d3 100644 --- a/gcc/d/dmd/module.h +++ b/gcc/d/dmd/module.h @@ -76,6 +76,7 @@ public: unsigned numlines; // number of lines in source file int isDocFile; // if it is a documentation input file, not D source bool isPackageFile; // if it is a package.d + Strings contentImportedFiles; // array of files whose content was imported int needmoduleinfo; int selfimports; // 0: don't know, 1: does not, 2: does diff --git a/gcc/testsuite/gdc.test/compilable/imports/pr9471a.d b/gcc/testsuite/gdc.test/compilable/imports/pr9471a.d new file mode 100644 index 0000000..79b78e1 --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/imports/pr9471a.d @@ -0,0 +1,2 @@ +import imports.pr9471c; +class AggregateDeclaration : ScopeDsymbol { } diff --git a/gcc/testsuite/gdc.test/compilable/imports/pr9471b.d b/gcc/testsuite/gdc.test/compilable/imports/pr9471b.d new file mode 100644 index 0000000..a46a12c --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/imports/pr9471b.d @@ -0,0 +1,5 @@ +import imports.pr9471a; +class ClassDeclaration : AggregateDeclaration +{ + void isBaseOf(); +} diff --git a/gcc/testsuite/gdc.test/compilable/imports/pr9471c.d b/gcc/testsuite/gdc.test/compilable/imports/pr9471c.d new file mode 100644 index 0000000..d80a614 --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/imports/pr9471c.d @@ -0,0 +1,18 @@ +import imports.pr9471b; + +struct Array(T) +{ + static if (is(typeof(T.opCmp))) { } +} +alias ClassDeclarations = Array!ClassDeclaration; + +class Dsymbol +{ + void addObjcSymbols(ClassDeclarations); +} + +class ScopeDsymbol : Dsymbol +{ + import imports.pr9471d; + void importScope(); +} diff --git a/gcc/testsuite/gdc.test/compilable/imports/pr9471d.d b/gcc/testsuite/gdc.test/compilable/imports/pr9471d.d new file mode 100644 index 0000000..187b908 --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/imports/pr9471d.d @@ -0,0 +1 @@ +// Module needs to be imported to trigger bug. diff --git a/gcc/testsuite/gdc.test/compilable/pr9471.d b/gcc/testsuite/gdc.test/compilable/pr9471.d new file mode 100644 index 0000000..37ff32e --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/pr9471.d @@ -0,0 +1,6 @@ +// PERMUTE_ARGS: +// EXTRA_FILES: imports/pr9471a.d imports/pr9471b.d imports/pr9471c.d imports/pr9471d.d +import imports.pr9471a; +import imports.pr9471b; + +static assert (__traits(getVirtualIndex, ClassDeclaration.isBaseOf) == 7); diff --git a/gcc/testsuite/gdc.test/runnable/traits.d b/gcc/testsuite/gdc.test/runnable/traits.d index 6c3bf78..b73ee01c 100644 --- a/gcc/testsuite/gdc.test/runnable/traits.d +++ b/gcc/testsuite/gdc.test/runnable/traits.d @@ -1253,7 +1253,7 @@ struct S10096X this(this) {} ~this() {} - string getStr() in(str) out(r; r == str) { return str; } + string getStr() in { assert(str); } out(r) { assert(r == str); } body { return str; } } static assert( [__traits(allMembers, S10096X)] == @@ -1271,7 +1271,7 @@ class C10096X this(int) {} ~this() {} - string getStr() in(str) out(r; r == str) { return str; + string getStr() in { assert(str); } out(r) { assert(r == str); } body { return str; } } static assert( [__traits(allMembers, C10096X)] == |