Showing with 28 additions and 1 deletion.
  1. +14 −1 src/mtype.d
  2. +14 −0 test/fail_compilation/diag3913.d
15 changes: 14 additions & 1 deletion src/mtype.d
Original file line number Diff line number Diff line change
Expand Up @@ -8306,7 +8306,20 @@ public:
{
return getProperty(e.loc, ident, flag);
}
return sym.getMemtype(Loc()).dotExp(sc, e, ident, flag);

Expression res = sym.getMemtype(Loc()).dotExp(sc, e, ident, 1);
if (flag != 1 && !res)
{
if (auto ns = sym.search_correct(ident))
e.error("no property '%s' for type '%s'. Did you mean '%s.%s' ?", ident.toChars(), toChars(), toChars(),
ns.toChars());
else
e.error("no property '%s' for type '%s'", ident.toChars(),
toChars());

return new ErrorExp();
}
return res;
}
EnumMember m = s.isEnumMember();
return m.getVarExp(e.loc, sc);
Expand Down
14 changes: 14 additions & 0 deletions test/fail_compilation/diag3913.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*
TEST_OUTPUT:
---
fail_compilation/diag3913.d(12): Error: no property 'foobardoo' for type 'Foo'
fail_compilation/diag3913.d(13): Error: no property 'secon' for type 'Foo'. Did you mean 'Foo.second' ?
---
*/

void main()
{
enum Foo { first, second }
auto a = Foo.foobardoo;
auto b = Foo.secon;
}