]> granicus.if.org Git - clang/commitdiff
Fix support for const_cast<>s of array types which actual change the
authorChandler Carruth <chandlerc@gmail.com>
Tue, 29 Dec 2009 08:05:19 +0000 (08:05 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 29 Dec 2009 08:05:19 +0000 (08:05 +0000)
CV-qualifiers. Remove an error expectation from the 'good' set of const-cast
test cases. With this patch, the final non-template test case from PR5542
passes. (It's the same as the one already in const-cast.cpp.)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92257 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaCXXCast.cpp
test/SemaCXX/const-cast.cpp

index 045ffb20deb8c6c1f47662f01ac060b5801ba7c2..800c544d3364a712970658d63a2efc3816119dc8 100644 (file)
@@ -959,8 +959,9 @@ static TryCastResult TryConstCast(Sema &Self, Expr *SrcExpr, QualType DestType,
   // as must be the final pointee type.
   while (SrcType != DestType &&
          Self.UnwrapSimilarPointerTypes(SrcType, DestType)) {
-    SrcType = SrcType.getUnqualifiedType();
-    DestType = DestType.getUnqualifiedType();
+    Qualifiers Quals;
+    SrcType = Self.Context.getUnqualifiedArrayType(SrcType, Quals);
+    DestType = Self.Context.getUnqualifiedArrayType(DestType, Quals);
   }
 
   // Since we're dealing in canonical types, the remainder must be the same.
index 74a67e564797404b0265cdb543d6d00650fdda63..220e6faeee3c40dac63d6bcec73b098baf519dd1 100644 (file)
@@ -28,8 +28,9 @@ char ***good_const_cast_test(ccvpcvpp var)
   char ***&var4 = const_cast<cpppr>(var3);
   // Drop reference. Intentionally without qualifier change.
   char *** var5 = const_cast<cppp>(var4);
+  // Const array to array reference.
   const int ar[100] = {0};
-  int (&rar)[100] = const_cast<iarr>(ar); // expected-error {{const_cast from 'int const [100]' to 'iarr' (aka 'iar &') is not allowed}}
+  int (&rar)[100] = const_cast<iarr>(ar);
   // Array decay. Intentionally without qualifier change.
   int *pi = const_cast<int*>(ar);
   f fp = 0;