summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2010-04-10 10:14:54 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2010-04-10 10:14:54 +0000
commitc72350ea9ff3d0df5206130c36fdb81f23b972da (patch)
treea651cac8193b34aaca44d92e99ad7cd7cb913a14 /clang/lib
parente2f3524f83dbde06ddce0fb62236e96e28789dbd (diff)
downloadbcm5719-llvm-c72350ea9ff3d0df5206130c36fdb81f23b972da.tar.gz
bcm5719-llvm-c72350ea9ff3d0df5206130c36fdb81f23b972da.zip
When a member pointer is dereferenced, the class it points into must be complete. Enforce this.
llvm-svn: 100925
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaExprCXX.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 7efba3ab67f..04b3d83f3e3 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -1847,6 +1847,9 @@ QualType Sema::CheckPointerToMemberOperands(
QualType Class(MemPtr->getClass(), 0);
+ if (RequireCompleteType(Loc, Class, diag::err_memptr_rhs_to_incomplete))
+ return QualType();
+
// C++ 5.5p2
// [...] to its first operand, which shall be of class T or of a class of
// which T is an unambiguous and accessible base class. [p3: a pointer to
OpenPOWER on IntegriCloud