forked from OSchip/llvm-project
[Sema] Fix typos handling in an overloadable call.
In C typos in arguments in a call of an overloadable function lead to a failure of construction of CallExpr and following recovery does not handle created delayed typos. This causes an assertion fail in Sema::~Sema since Sema::DelayedTypos remains not empty. The patch fixes that behavior by handling a call with arguments having dependant types in the way that C++ does. Differential Revision: https://reviews.llvm.org/D31764 Patch by Dmitry Borisenkov! llvm-svn: 302435
This commit is contained in:
parent
0fbdaa1f0c
commit
f16634c884
|
@ -5277,6 +5277,9 @@ ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc,
|
|||
|
||||
// We aren't supposed to apply this logic if there's an '&' involved.
|
||||
if (!find.HasFormOfMemberPointer) {
|
||||
if (Expr::hasAnyTypeDependentArguments(ArgExprs))
|
||||
return new (Context) CallExpr(
|
||||
Context, Fn, ArgExprs, Context.DependentTy, VK_RValue, RParenLoc);
|
||||
OverloadExpr *ovl = find.Expression;
|
||||
if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(ovl))
|
||||
return BuildOverloadedCallExpr(
|
||||
|
|
|
@ -80,3 +80,10 @@ int h() {
|
|||
g(x, 5 ? z : 0); // expected-error 2 {{use of undeclared identifier}}
|
||||
(x, 5 ? z : 0); // expected-error 2 {{use of undeclared identifier}}
|
||||
}
|
||||
|
||||
__attribute__((overloadable)) void func_overloadable(int);
|
||||
__attribute__((overloadable)) void func_overloadable(float);
|
||||
|
||||
void overloadable_callexpr(int arg) {
|
||||
func_overloadable(ar); //expected-error{{use of undeclared identifier}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue