[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