From 4390075e41d40aa642b78e21d261d24d0d369a57 Mon Sep 17 00:00:00 2001 From: Hal Finkel Date: Sat, 19 Jul 2014 02:01:03 +0000 Subject: [PATCH] TypePrinter should not ignore IndexTypeCVRQualifiers on constant-sized arrays C99 array parameters can have index-type CVR qualifiers, and the TypePrinter should print them when present (and we were not for constant-sized arrays). Otherwise, we'd drop the restrict in: int foo(int a[restrict static 3]) { ... } git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213445 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/TypePrinter.cpp | 4 ++++ test/Sema/ast-print.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp index d357b3215a..d06bfbdb7a 100644 --- a/lib/AST/TypePrinter.cpp +++ b/lib/AST/TypePrinter.cpp @@ -431,6 +431,10 @@ void TypePrinter::printConstantArrayBefore(const ConstantArrayType *T, void TypePrinter::printConstantArrayAfter(const ConstantArrayType *T, raw_ostream &OS) { OS << '['; + if (T->getIndexTypeQualifiers().hasQualifiers()) { + AppendTypeQualList(OS, T->getIndexTypeCVRQualifiers()); + OS << ' '; + } if (T->getSizeModifier() == VariableArrayType::Static) OS << "static "; diff --git a/test/Sema/ast-print.c b/test/Sema/ast-print.c index e40c4dd231..382f0d3896 100644 --- a/test/Sema/ast-print.c +++ b/test/Sema/ast-print.c @@ -24,8 +24,18 @@ int arr(int a[static 3]) { return a[2]; } +int rarr(int a[restrict static 3]) { + // CHECK: int a[restrict static 3] + return a[2]; +} + int varr(int n, int a[static n]) { // CHECK: int a[static n] return a[2]; } +int rvarr(int n, int a[restrict static n]) { + // CHECK: int a[restrict static n] + return a[2]; +} + -- 2.40.0