From a121eb3af061a9402aa88630a0eb535d92962e2c Mon Sep 17 00:00:00 2001 From: Richard Smith <richard-llvm@metafoo.co.uk> Date: Tue, 15 Jan 2013 07:12:59 +0000 Subject: [PATCH] PR14950: Fix out-of-bounds function parameter access in literal operator lookup. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172514 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaLookup.cpp | 2 +- test/SemaCXX/cxx11-user-defined-literals.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index fdd33cf73ae..4ae27a4adc8 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -2536,7 +2536,7 @@ Sema::LookupLiteralOperator(Scope *S, LookupResult &R, if (FD->getNumParams() == 1 && FD->getParamDecl(0)->getType()->getAs<PointerType>()) IsRaw = true; - else { + else if (FD->getNumParams() == ArgTys.size()) { IsExactMatch = true; for (unsigned ArgIdx = 0; ArgIdx != ArgTys.size(); ++ArgIdx) { QualType ParamTy = FD->getParamDecl(ArgIdx)->getType(); diff --git a/test/SemaCXX/cxx11-user-defined-literals.cpp b/test/SemaCXX/cxx11-user-defined-literals.cpp index 4bbecdb5b8e..f8bbcd960fd 100644 --- a/test/SemaCXX/cxx11-user-defined-literals.cpp +++ b/test/SemaCXX/cxx11-user-defined-literals.cpp @@ -135,3 +135,9 @@ namespace Namespace { int _y(unsigned long long); int k2 = 123_y; // expected-error {{no matching literal operator for call to 'operator "" _y'}} } + +namespace PR14950 { + template<...> // expected-error {{expected template parameter}} + int operator"" _b(); // expected-error {{no function template matches function template specialization}} + int main() { return 0_b; } // expected-error {{no matching literal operator for call to 'operator "" _b'}} +} -- GitLab