aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/d/dmd/MERGE2
-rw-r--r--gcc/d/dmd/typesem.d14
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail347.d4
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/ufcs.d36
4 files changed, 36 insertions, 20 deletions
diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE
index 9982d0d..0b554f1 100644
--- a/gcc/d/dmd/MERGE
+++ b/gcc/d/dmd/MERGE
@@ -1,4 +1,4 @@
-94950cae582d89f5ba2720786522f669f620f9d1
+9d2f034398c33be1a28d8c60721014a6ab34d652
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/typesem.d b/gcc/d/dmd/typesem.d
index 65bad38..c5a3b83 100644
--- a/gcc/d/dmd/typesem.d
+++ b/gcc/d/dmd/typesem.d
@@ -3444,8 +3444,16 @@ Expression getProperty(Type t, Scope* scope_, Loc loc, Identifier ident, int fla
auto s2 = scope_.search_correct(ident);
// UFCS
if (s2 && s2.isFuncDeclaration)
- errorSupplemental(loc, "did you mean %s `%s`?",
- s2.kind(), s2.toChars());
+ {
+ if (s2.ident == ident)
+ {
+ errorSupplemental(s2.loc, "cannot call %s `%s` with UFCS because it is not declared at module scope",
+ s2.kind(), s2.toChars());
+ }
+ else
+ errorSupplemental(s2.loc, "did you mean %s `%s`?",
+ s2.kind(), s2.toChars());
+ }
else if (src.type.ty == Tpointer)
{
// structPtr.field
@@ -3454,7 +3462,7 @@ Expression getProperty(Type t, Scope* scope_, Loc loc, Identifier ident, int fla
{
if (auto s3 = as.search_correct(ident))
{
- errorSupplemental(loc, "did you mean %s `%s`?",
+ errorSupplemental(s3.loc, "did you mean %s `%s`?",
s3.kind(), s3.toChars());
}
}
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail347.d b/gcc/testsuite/gdc.test/fail_compilation/fail347.d
index e495ba2..c56acf5 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/fail347.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/fail347.d
@@ -5,10 +5,10 @@ TEST_OUTPUT:
fail_compilation/fail347.d(26): Error: undefined identifier `bbr`, did you mean variable `bar`?
fail_compilation/fail347.d(27): Error: no property `ofo` for type `S`, did you mean `fail347.S.foo`?
fail_compilation/fail347.d(29): Error: no property `fool` for `sp` of type `fail347.S*`
-fail_compilation/fail347.d(29): did you mean variable `foo`?
+fail_compilation/fail347.d(20): did you mean variable `foo`?
fail_compilation/fail347.d(30): Error: undefined identifier `strlenx`, did you mean function `strlen`?
fail_compilation/fail347.d(31): Error: no property `strlenx` for `"hello"` of type `string`
-fail_compilation/fail347.d(31): did you mean function `strlen`?
+fail_compilation/imports/fail347a.d(3): did you mean function `strlen`?
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/ufcs.d b/gcc/testsuite/gdc.test/fail_compilation/ufcs.d
index 3a92a69..87efbcf 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/ufcs.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/ufcs.d
@@ -1,23 +1,28 @@
/*
TEST_OUTPUT:
---
-fail_compilation/ufcs.d(26): Error: no property `regularF` for `s` of type `S`
-fail_compilation/ufcs.d(26): the following error occured while looking for a UFCS match
-fail_compilation/ufcs.d(26): Error: function `regularF` is not callable using argument types `(S)`
-fail_compilation/ufcs.d(26): expected 0 argument(s), not 1
-fail_compilation/ufcs.d(31): `ufcs.regularF()` declared here
-fail_compilation/ufcs.d(27): Error: no property `templateF` for `s` of type `S`
-fail_compilation/ufcs.d(27): the following error occured while looking for a UFCS match
-fail_compilation/ufcs.d(27): Error: template `templateF` is not callable using argument types `!()(S)`
-fail_compilation/ufcs.d(32): Candidate is: `templateF()()`
-fail_compilation/ufcs.d(28): Error: no property `templateO` for `s` of type `S`
-fail_compilation/ufcs.d(28): the following error occured while looking for a UFCS match
-fail_compilation/ufcs.d(28): Error: none of the overloads of template `ufcs.templateO` are callable using argument types `!()(S)`
-fail_compilation/ufcs.d(34): Candidates are: `templateO()(int x)`
-fail_compilation/ufcs.d(35): `templateO()(float y)`
+fail_compilation/ufcs.d(31): Error: no property `regularF` for `s` of type `S`
+fail_compilation/ufcs.d(31): the following error occured while looking for a UFCS match
+fail_compilation/ufcs.d(31): Error: function `regularF` is not callable using argument types `(S)`
+fail_compilation/ufcs.d(31): expected 0 argument(s), not 1
+fail_compilation/ufcs.d(39): `ufcs.regularF()` declared here
+fail_compilation/ufcs.d(32): Error: no property `templateF` for `s` of type `S`
+fail_compilation/ufcs.d(32): the following error occured while looking for a UFCS match
+fail_compilation/ufcs.d(32): Error: template `templateF` is not callable using argument types `!()(S)`
+fail_compilation/ufcs.d(40): Candidate is: `templateF()()`
+fail_compilation/ufcs.d(33): Error: no property `templateO` for `s` of type `S`
+fail_compilation/ufcs.d(33): the following error occured while looking for a UFCS match
+fail_compilation/ufcs.d(33): Error: none of the overloads of template `ufcs.templateO` are callable using argument types `!()(S)`
+fail_compilation/ufcs.d(42): Candidates are: `templateO()(int x)`
+fail_compilation/ufcs.d(43): `templateO()(float y)`
+fail_compilation/ufcs.d(36): Error: no property `local` for `s` of type `ufcs.S`
+fail_compilation/ufcs.d(35): cannot call function `local` with UFCS because it is not declared at module scope
+fail_compilation/ufcs.d(26): struct `S` defined here
---
*/
+
+
struct S { }
void f()
@@ -26,6 +31,9 @@ void f()
s.regularF();
s.templateF();
s.templateO();
+
+ void local(S) {}
+ s.local();
}
void regularF();