diff options
author | Eric Fiselier <eric@efcs.ca> | 2017-07-31 00:24:28 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2017-07-31 00:24:28 +0000 |
commit | 3cc9f7d52aa367cb636c01f6e37d7f8301527b2b (patch) | |
tree | b9f36e191410e657d572e11d3cc326a5bedc4131 /lib/Sema/SemaLookup.cpp | |
parent | 25d97be59a5c79e79b6ff28751a5ec7e22150f2c (diff) |
[Sema] Fix operator lookup to consider local extern declarations.
Summary:
Previously Clang was not considering operator declarations that occur at function scope. This is incorrect according to [over.match.oper]p3
> The set of non-member candidates is the result of the unqualified lookup of operator@ in the context of the expression according to the usual rules for name lookup in unqualified function calls.
This patch changes operator name lookup to consider block scope declarations.
This patch fixes PR27027.
Reviewers: rsmith
Reviewed By: rsmith
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D35297
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@309530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaLookup.cpp')
-rw-r--r-- | lib/Sema/SemaLookup.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index 85596ed52e..4f88edcb31 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -1031,7 +1031,8 @@ struct FindLocalExternScope { FindLocalExternScope(LookupResult &R) : R(R), OldFindLocalExtern(R.getIdentifierNamespace() & Decl::IDNS_LocalExtern) { - R.setFindLocalExtern(R.getIdentifierNamespace() & Decl::IDNS_Ordinary); + R.setFindLocalExtern(R.getIdentifierNamespace() & + (Decl::IDNS_Ordinary | Decl::IDNS_NonMemberOperator)); } void restore() { R.setFindLocalExtern(OldFindLocalExtern); |