Fix infinite loop during error diagnostics. Fixes rdar://8875304.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124243 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Argyrios Kyrtzidis 2011-01-25 23:16:36 +00:00
Родитель 98650449dc
Коммит df8dc5d772
2 изменённых файлов: 14 добавлений и 1 удалений

Просмотреть файл

@ -3814,7 +3814,7 @@ Sema::LookupMemberExpr(LookupResult &R, Expr *&BaseExpr,
// - 'type' is an Objective C type
// - 'bar' is a pseudo-destructor name which happens to refer to
// the appropriate pointer type
} else if (Ptr->getPointeeType()->isRecordType() &&
} else if (!IsArrow && Ptr->getPointeeType()->isRecordType() &&
MemberName.getNameKind() != DeclarationName::CXXDestructorName) {
Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
<< BaseType << int(IsArrow) << BaseExpr->getSourceRange()

Просмотреть файл

@ -23,3 +23,16 @@ void f(C &c, D& d, E& e) {
d->f();
e->f(); // expected-error{{incomplete definition of type}}
}
// rdar://8875304
namespace rdar8875304 {
class Point {};
class Line_Segment{ public: Line_Segment(const Point&){} };
class Node { public: Point Location(){ Point p; return p; } };
void f()
{
Node** node1;
Line_Segment(node1->Location()); // expected-error {{not a structure or union}}
}
}