summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-expr.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-08-04 14:05:02 -0700
committerGitHub <noreply@github.com>2022-08-04 14:05:02 -0700
commit11b29eff99910d55a54658b8a1d053cc4ec076fc (patch)
treeac82bef698df94f74a788cdc160dfd30472fb601 /source/slang/slang-check-expr.cpp
parente43ef82e288afe486f45ef2736d378e88f40cc90 (diff)
Implicit pointer dereference when using member operator. (#2348)
* Implicit pointer dereference when using member operator. * Add expected test result * Fix lookup. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
-rw-r--r--source/slang/slang-check-expr.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index addd3a5c4..b7f99c4e7 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -382,15 +382,15 @@ namespace Slang
Expr* base,
SourceLoc loc)
{
- auto ptrLikeType = as<PointerLikeType>(base->type);
- SLANG_ASSERT(ptrLikeType);
+ auto elementType = getPointedToTypeIfCanImplicitDeref(base->type);
+ SLANG_ASSERT(elementType);
auto derefExpr = m_astBuilder->create<DerefExpr>();
derefExpr->loc = loc;
derefExpr->base = base;
- derefExpr->type = QualType(ptrLikeType->elementType);
+ derefExpr->type = QualType(elementType);
- // TODO(tfoley): handle l-value status here
+ derefExpr->type.isLeftValue = base->type.isLeftValue;
return derefExpr;
}
@@ -1258,7 +1258,9 @@ namespace Slang
m_astBuilder,
this,
name,
- baseType);
+ baseType,
+ LookupMask::Default,
+ LookupOptions::NoDeref);
if (!lookupResult.isValid())
{
goto fail;