Index: lib/Sema/SemaLookup.cpp =================================================================== --- lib/Sema/SemaLookup.cpp +++ lib/Sema/SemaLookup.cpp @@ -226,7 +226,7 @@ // Operator lookup is its own crazy thing; it is not the same // as (e.g.) looking up an operator name for redeclaration. assert(!Redeclaration && "cannot do redeclaration operator lookup"); - IDNS = Decl::IDNS_NonMemberOperator; + IDNS = Decl::IDNS_NonMemberOperator | Decl::IDNS_LocalExtern; break; case Sema::LookupTagName: Index: test/SemaCXX/overloaded-operator.cpp =================================================================== --- test/SemaCXX/overloaded-operator.cpp +++ test/SemaCXX/overloaded-operator.cpp @@ -531,3 +531,20 @@ b3 / 0; // expected-note {{in instantiation of}} expected-error {{invalid operands to}} } } + + +namespace TestLookupFindsBlockScopeDecls { + template void operator+(T, T) = delete; // expected-note 2 {{candidate}} + template void operator+(T) = delete; // expected-note 2 {{candidate}} + + struct A {}; + void f() { + A a; + +a; // expected-error {{overload resolution selected deleted operator '+'}} + a + a; // expected-error {{overload resolution selected deleted operator '+'}} + void operator+(A); + void operator+(A, A); + +a; // OK + a + a; + } +}