[cfe-commits] r77502 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/SemaCXX/access-control-check.cpp
Fariborz Jahanian
fjahanian at apple.com
Wed Jul 29 13:41:47 PDT 2009
Author: fjahanian
Date: Wed Jul 29 15:41:46 2009
New Revision: 77502
URL: http://llvm.org/viewvc/llvm-project?rev=77502&view=rev
Log:
Some refactoring of member access for
performace sake. Also added a test case.
Added:
cfe/trunk/test/SemaCXX/access-control-check.cpp
Modified:
cfe/trunk/lib/Sema/SemaExpr.cpp
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=77502&r1=77501&r2=77502&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Jul 29 15:41:46 2009
@@ -1031,23 +1031,21 @@
dyn_cast<CXXRecordDecl>(FD->getDeclContext())) {
QualType DestType =
Context.getCanonicalType(Context.getTypeDeclType(RD));
- if (!DestType->isDependentType() &&
- !From->getType()->isDependentType()) {
- QualType FromRecordType = From->getType();
- QualType DestRecordType = DestType;
- if (FromRecordType->getAsPointerType()) {
- DestType = Context.getPointerType(DestType);
- FromRecordType = FromRecordType->getPointeeType();
- }
- if (IsDerivedFrom(FromRecordType, DestRecordType) &&
- CheckDerivedToBaseConversion(FromRecordType,
- DestRecordType,
- From->getSourceRange().getBegin(),
- From->getSourceRange()))
- return true;
-
- ImpCastExprToType(From, DestType, /*isLvalue=*/true);
- }
+ if (DestType->isDependentType() || From->getType()->isDependentType())
+ return false;
+ QualType FromRecordType = From->getType();
+ QualType DestRecordType = DestType;
+ if (FromRecordType->getAsPointerType()) {
+ DestType = Context.getPointerType(DestType);
+ FromRecordType = FromRecordType->getPointeeType();
+ }
+ if (!Context.hasSameUnqualifiedType(FromRecordType, DestRecordType) &&
+ CheckDerivedToBaseConversion(FromRecordType,
+ DestRecordType,
+ From->getSourceRange().getBegin(),
+ From->getSourceRange()))
+ return true;
+ ImpCastExprToType(From, DestType, /*isLvalue=*/true);
}
return false;
}
Added: cfe/trunk/test/SemaCXX/access-control-check.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/access-control-check.cpp?rev=77502&view=auto
==============================================================================
--- cfe/trunk/test/SemaCXX/access-control-check.cpp (added)
+++ cfe/trunk/test/SemaCXX/access-control-check.cpp Wed Jul 29 15:41:46 2009
@@ -0,0 +1,16 @@
+// RUN: clang-cc -fsyntax-only -faccess-control -verify %s
+
+class M {
+ int iM;
+};
+
+class P {
+ int iP;
+ int PPR();
+};
+
+class N : M,P {
+ N() {}
+ // FIXME. No access violation is reported in method call or member access.
+ int PR() { return iP + PPR(); }
+};
More information about the cfe-commits
mailing list