summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2012-11-09 06:06:14 +0000
committerNico Weber <nicolasweber@gmx.de>2012-11-09 06:06:14 +0000
commit1fefe417f0ffdff81e92e70fdf52afa5308d50dc (patch)
tree44193157a631470fe8304d55cbd29254bbe0fc72
parent5ad5a9511ca1954162c84923996a7820ab712965 (diff)
downloadbcm5719-llvm-1fefe417f0ffdff81e92e70fdf52afa5308d50dc.tar.gz
bcm5719-llvm-1fefe417f0ffdff81e92e70fdf52afa5308d50dc.zip
Don't crash on calling static member overloaded operator, PR14120
Patch from Brian Brooks! llvm-svn: 167604
-rw-r--r--clang/lib/Sema/SemaOverload.cpp5
-rw-r--r--clang/test/SemaCXX/overloaded-operator-decl.cpp10
2 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index bf2b89741ab..10e7ec42201 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -10997,6 +10997,11 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
// that calls this method, using Object for the implicit object
// parameter and passing along the remaining arguments.
CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
+
+ // An error diagnostic has already been printed when parsing the declaration.
+ if (Method->isStatic())
+ return ExprError();
+
const FunctionProtoType *Proto =
Method->getType()->getAs<FunctionProtoType>();
diff --git a/clang/test/SemaCXX/overloaded-operator-decl.cpp b/clang/test/SemaCXX/overloaded-operator-decl.cpp
index 4519a2d1f9a..972e2deac29 100644
--- a/clang/test/SemaCXX/overloaded-operator-decl.cpp
+++ b/clang/test/SemaCXX/overloaded-operator-decl.cpp
@@ -48,3 +48,13 @@ struct PR10839 {
operator int; // expected-error{{'operator int' cannot be the name of a variable or data member}}
int operator+; // expected-error{{'operator+' cannot be the name of a variable or data member}}
};
+
+namespace PR14120 {
+ struct A {
+ static void operator()(int& i) { ++i; } // expected-error{{overloaded 'operator()' cannot be a static member function}}
+ };
+ void f() {
+ int i = 0;
+ A()(i);
+ }
+}
OpenPOWER on IntegriCloud