]> granicus.if.org Git - clang/commitdiff
Fix crash typo-correcting dependent member func.
authorEli Friedman <eli.friedman@gmail.com>
Mon, 8 Jul 2013 23:35:04 +0000 (23:35 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Mon, 8 Jul 2013 23:35:04 +0000 (23:35 +0000)
PR16561.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185887 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/Sema.cpp
test/SemaCXX/addr-of-overloaded-function.cpp

index 3ddce77a883c4375697537d0f562dd5ef4ed7247..e55e128daef20f2084bb7291bcc0571e6ccea877 100644 (file)
@@ -1187,7 +1187,7 @@ bool Sema::tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
   // Attempt to call the member with no arguments - this will correctly handle
   // member templates with defaults/deduction of template arguments, overloads
   // with default arguments, etc.
-  if (IsMemExpr) {
+  if (IsMemExpr && !E.isTypeDependent()) {
     bool Suppress = getDiagnostics().getSuppressAllDiagnostics();
     getDiagnostics().setSuppressAllDiagnostics(true);
     ExprResult R = BuildCallToMemberFunction(NULL, &E, SourceLocation(), None,
index 3d007a9612aaa37d25d9ab0763efe10375b0dfa9..230a1eb994e195f220ecc3cce0f3a7e57e37b01f 100644 (file)
@@ -235,3 +235,7 @@ namespace test1 {
 
   void (Qualifiers::*X)() = &Dummy::N; // expected-error{{cannot initialize a variable of type 'void (test1::Qualifiers::*)()' with an rvalue of type 'void (test1::Dummy::*)()': different classes ('test1::Qualifiers' vs 'test1::Dummy')}}
 }
+
+template <typename T> class PR16561 {
+  virtual bool f() { if (f) {} return false; } // expected-error {{reference to non-static member function must be called}}
+};