diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 29ba34479dab..782c377e3202 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -11426,6 +11426,10 @@ static void AddOverloadedCallCandidate(Sema &S, assert(!KnownValid && "Explicit template arguments?"); return; } + // Prevent ill-formed function decls to be added as overload candidates. + if (!dyn_cast(Func->getType()->getAs())) + return; + S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, /*SuppressUsedConversions=*/false, PartialOverloading); diff --git a/clang/test/Modules/Inputs/malformed-overload/X.h b/clang/test/Modules/Inputs/malformed-overload/X.h new file mode 100644 index 000000000000..b659406e16ed --- /dev/null +++ b/clang/test/Modules/Inputs/malformed-overload/X.h @@ -0,0 +1,2 @@ +@class NSString; +extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2))) __attribute__((not_tail_called)); diff --git a/clang/test/Modules/Inputs/malformed-overload/module.modulemap b/clang/test/Modules/Inputs/malformed-overload/module.modulemap new file mode 100644 index 000000000000..8fe4c92a1738 --- /dev/null +++ b/clang/test/Modules/Inputs/malformed-overload/module.modulemap @@ -0,0 +1,4 @@ +module X { + header "X.h" + export * +} diff --git a/clang/test/Modules/malformed-overload.m b/clang/test/Modules/malformed-overload.m new file mode 100644 index 000000000000..ad6db8a46c31 --- /dev/null +++ b/clang/test/Modules/malformed-overload.m @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -fsyntax-only -I%S/Inputs/malformed-overload -fmodules -fimplicit-module-maps -fmodules-cache-path=tmp -verify %s +NSLog(@"%@", path); // expected-error {{expected parameter declarator}} expected-error {{expected ')'}} expected-warning {{type specifier missing}} expected-warning {{incompatible redeclaration}} expected-note {{to match this '('}} expected-note {{'NSLog' is a builtin with type}} +#import "X.h" + +@class NSString; +void f(NSString *a) { + NSLog(@"***** failed to get URL for %@", a); +}