Author: majnemer
Date: Thu Apr  9 14:53:25 2015
New Revision: 234528

URL: http://llvm.org/viewvc/llvm-project?rev=234528&view=rev
Log:
[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.

Modified:
    cfe/trunk/lib/Sema/SemaChecking.cpp
    cfe/trunk/test/SemaCXX/vla.cpp

Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=234528&r1=234527&r2=234528&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Thu Apr  9 14:53:25 2015
@@ -7713,6 +7713,10 @@ static void diagnoseArrayStarInParamType
     diagnoseArrayStarInParamType(S, PointerTy->getPointeeType(), Loc);
     return;
   }
+  if (const auto *ReferenceTy = dyn_cast<ReferenceType>(PType)) {
+    diagnoseArrayStarInParamType(S, ReferenceTy->getPointeeType(), Loc);
+    return;
+  }
   if (const auto *ParenTy = dyn_cast<ParenType>(PType)) {
     diagnoseArrayStarInParamType(S, ParenTy->getInnerType(), Loc);
     return;

Modified: cfe/trunk/test/SemaCXX/vla.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/vla.cpp?rev=234528&r1=234527&r2=234528&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/vla.cpp (original)
+++ cfe/trunk/test/SemaCXX/vla.cpp Thu Apr  9 14:53:25 2015
@@ -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}}
+}


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to