From 3a19309ae09f85ec77f01b1eaa197b403676b6c0 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Thu, 9 Apr 2015 19:53:25 +0000 Subject: [PATCH] [Sema] Diagnose references to unbound arrays in function definitions A [*] is only allowed in a declaration for a function, not in its definition. We didn't correctly recurse on reference types while looking for it, causing us to crash in CodeGen instead of rejecting it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234528 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaChecking.cpp | 4 ++++ test/SemaCXX/vla.cpp | 3 +++ 2 files changed, 7 insertions(+) diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index e557c50e02..d4390e53f0 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -7713,6 +7713,10 @@ static void diagnoseArrayStarInParamType(Sema &S, QualType PType, diagnoseArrayStarInParamType(S, PointerTy->getPointeeType(), Loc); return; } + if (const auto *ReferenceTy = dyn_cast(PType)) { + diagnoseArrayStarInParamType(S, ReferenceTy->getPointeeType(), Loc); + return; + } if (const auto *ParenTy = dyn_cast(PType)) { diagnoseArrayStarInParamType(S, ParenTy->getInnerType(), Loc); return; diff --git a/test/SemaCXX/vla.cpp b/test/SemaCXX/vla.cpp index dae6450553..6efb648e78 100644 --- a/test/SemaCXX/vla.cpp +++ b/test/SemaCXX/vla.cpp @@ -17,3 +17,6 @@ namespace PR18581 { incomplete c[n]; // expected-error {{incomplete}} } } + +void pr23151(int (&)[*]) { // expected-error {{variable length array must be bound in function definition}} +} -- 2.50.1