diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2021-07-25 19:54:08 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2021-07-28 13:13:04 +0200 |
commit | 3e2136117487fa839f7601c3e22a2856978fb9d0 (patch) | |
tree | 0a96be35515f3aed36ecda3946949504be845423 /gcc/d | |
parent | ea22954e7c580d1e54da4ac58301f65d5cf5f76a (diff) | |
download | gcc-3e2136117487fa839f7601c3e22a2856978fb9d0.zip gcc-3e2136117487fa839f7601c3e22a2856978fb9d0.tar.gz gcc-3e2136117487fa839f7601c3e22a2856978fb9d0.tar.bz2 |
d: Change in DotTemplateExp type semantics leading to regression (PR101619)
By giving dot templates a type, meant that properry resolving silently
started passing for code that should never have passed. The simple fix
is to provide implementations for checkType and checkValue that give an
error about dot templates having neither a value nor type.
Reviewed-on: https://github.com/dlang/dmd/pull/12920
PR d/101619
gcc/d/ChangeLog:
* dmd/MERGE: Merge upstream dmd 1d8386a63.
Diffstat (limited to 'gcc/d')
-rw-r--r-- | gcc/d/dmd/MERGE | 2 | ||||
-rw-r--r-- | gcc/d/dmd/expression.c | 12 | ||||
-rw-r--r-- | gcc/d/dmd/expression.h | 2 |
3 files changed, 15 insertions, 1 deletions
diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index d20785d..127f9f8 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -7a3808254878df8cb70a055bea58afc79187b778 +1d8386a63d412c9e77728b0b965025ac4dd40b75 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/expression.c b/gcc/d/dmd/expression.c index 153819a..7166f97 100644 --- a/gcc/d/dmd/expression.c +++ b/gcc/d/dmd/expression.c @@ -4200,6 +4200,18 @@ DotTemplateExp::DotTemplateExp(Loc loc, Expression *e, TemplateDeclaration *td) this->td = td; } +bool DotTemplateExp::checkType() +{ + error("%s %s has no type", td->kind(), toChars()); + return true; +} + +bool DotTemplateExp::checkValue() +{ + error("%s %s has no value", td->kind(), toChars()); + return true; +} + /************************************************************/ DotVarExp::DotVarExp(Loc loc, Expression *e, Declaration *var, bool hasOverloads) diff --git a/gcc/d/dmd/expression.h b/gcc/d/dmd/expression.h index 2ed8fac..9413ad9 100644 --- a/gcc/d/dmd/expression.h +++ b/gcc/d/dmd/expression.h @@ -930,6 +930,8 @@ public: TemplateDeclaration *td; DotTemplateExp(Loc loc, Expression *e, TemplateDeclaration *td); + bool checkType(); + bool checkValue(); void accept(Visitor *v) { v->visit(this); } }; |