summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaCast.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-01-16 12:02:55 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-01-16 12:02:55 +0000
commitf5b93794b7115ec019882b71936202467608c1b6 (patch)
treec308b336b35f358df4bee1b365c239cd086b4531 /clang/lib/Sema/SemaCast.cpp
parent780d85a8ef9aa81bb81d8b68715c30483c4f78aa (diff)
downloadbcm5719-llvm-f5b93794b7115ec019882b71936202467608c1b6.tar.gz
bcm5719-llvm-f5b93794b7115ec019882b71936202467608c1b6.zip
Sema: Fix crash during member pointer conversion involving incomplete classes
We would attempt to determine the inheritance relationship between classes 'A' and 'B' during static_cast if we tried to convert from 'int A::*' to 'int B::*'. However, the question "does A derive from B" is not meaningful when 'A' isn't defined. Handle this case by requiring that 'A' be defined. This fixes PR18506. llvm-svn: 199374
Diffstat (limited to 'clang/lib/Sema/SemaCast.cpp')
-rw-r--r--clang/lib/Sema/SemaCast.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp
index ef229cf838b..63cb15db529 100644
--- a/clang/lib/Sema/SemaCast.cpp
+++ b/clang/lib/Sema/SemaCast.cpp
@@ -1346,7 +1346,8 @@ TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,
QualType DestClass(DestMemPtr->getClass(), 0);
CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
/*DetectVirtual=*/true);
- if (!Self.IsDerivedFrom(SrcClass, DestClass, Paths)) {
+ if (Self.RequireCompleteType(OpRange.getBegin(), SrcClass, 0) ||
+ !Self.IsDerivedFrom(SrcClass, DestClass, Paths)) {
return TC_NotApplicable;
}
OpenPOWER on IntegriCloud