[clang] 40acc0a - Improve type printing of size-dependent const arrays to normalize array-of-const and const-array

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 15 13:47:03 PDT 2021


Author: David Blaikie
Date: 2021-09-15T13:46:37-07:00
New Revision: 40acc0adad59ac39e9a7a02fcd93161298500c00

URL: https://github.com/llvm/llvm-project/commit/40acc0adad59ac39e9a7a02fcd93161298500c00
DIFF: https://github.com/llvm/llvm-project/commit/40acc0adad59ac39e9a7a02fcd93161298500c00.diff

LOG: Improve type printing of size-dependent const arrays to normalize array-of-const and const-array

Follow-on from 2bd84938470bf2e337801faafb8a67710f46429d based on
postcommit feedback from Richard Smith.

The VariableArray case I couldn't figure out how to test/provoke - you
can't write/form a variable array in any context other than a local
variable that I know of, and in that case `const int x[n]` is the
normalized form already (array-of-const) and you can't use typedefs
(since you can't typedef int[n] with variable 'n') to force the
const-array AST that would produce the undesirable type printing "int
const [n]".

Added: 
    

Modified: 
    clang/lib/AST/TypePrinter.cpp
    clang/test/AST/ast-dump-array.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp
index 251db97c7db08..749a3e25d28a4 100644
--- a/clang/lib/AST/TypePrinter.cpp
+++ b/clang/lib/AST/TypePrinter.cpp
@@ -242,13 +242,16 @@ bool TypePrinter::canPrefixQualifiers(const Type *T,
         T->isObjCQualifiedIdType() || T->isObjCQualifiedClassType();
       break;
 
+    case Type::DependentSizedArray:
+      NeedARCStrongQualifier = true;
+      LLVM_FALLTHROUGH;
+
     case Type::ConstantArray:
     case Type::IncompleteArray:
       return canPrefixQualifiers(
           cast<ArrayType>(UnderlyingType)->getElementType().getTypePtr(),
           NeedARCStrongQualifier);
     case Type::VariableArray:
-    case Type::DependentSizedArray:
       NeedARCStrongQualifier = true;
       LLVM_FALLTHROUGH;
 

diff  --git a/clang/test/AST/ast-dump-array.cpp b/clang/test/AST/ast-dump-array.cpp
index fe7875ec95c90..2e94f7769e0bd 100644
--- a/clang/test/AST/ast-dump-array.cpp
+++ b/clang/test/AST/ast-dump-array.cpp
@@ -23,5 +23,6 @@ class array {
 
   using array_T_size = T[Size];
   // CHECK: `-DependentSizedArrayType 0x{{[^ ]*}} 'T [Size]' dependent   <col:25, col:30>
+  using const_array_T_size = const T[Size];
+  // CHECK: `-DependentSizedArrayType 0x{{[^ ]*}} 'const T [Size]' dependent   <col:37, col:42>
 };
-


        


More information about the cfe-commits mailing list