vsapsai added a comment.

In https://reviews.llvm.org/D37322#859065, @ahatanak wrote:

> Is it possible to avoid creating CXXDependentScopeMemberExpr in the first 
> place? It seems to me that we shouldn't be creating a 
> CXXDependentScopeMemberExpr for an ObjC property access.
>
> Or perhaps there are reasons to type-correct it later?


In `Sema::ActOnMemberAccessExpr` we handle dependent member expressions before 
other member references

  if (Base->getType()->isDependentType() || Name.isDependentName() ||
      isDependentScopeSpecifier(SS)) {
    return ActOnDependentMemberExpr(Base, Base->getType(), IsArrow, OpLoc, SS,
                                    TemplateKWLoc, FirstQualifierInScope,
                                    NameInfo, TemplateArgs);
  }
  
  ActOnMemberAccessExtraArgs ExtraArgs = {S, Id, ObjCImpDecl};
  return BuildMemberReferenceExpr(Base, Base->getType(), OpLoc, IsArrow, SS,
                                  TemplateKWLoc, FirstQualifierInScope,
                                  NameInfo, TemplateArgs, S, &ExtraArgs);

In this case variable `Base` is a `TypoExpr` and it is created as 
type-dependent regardless of the current language.

  TypoExpr(QualType T)
      : Expr(TypoExprClass, T, VK_LValue, OK_Ordinary,
             /*isTypeDependent*/ true,
             /*isValueDependent*/ true,
             /*isInstantiationDependent*/ true,
             /*containsUnexpandedParameterPack*/ false) {
    assert(T->isDependentType() && "TypoExpr given a non-dependent type");
  }

As a result we end up with `CXXDependentScopeMemberExpr` when reference a 
member of a `TypoExpr`. I'm not entirely sure but it looks like it was designed 
to work this way.


https://reviews.llvm.org/D37322



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to