[PATCH] Fix for http://llvm.org/PR21915: Assertion Failed on	multidimensional VLA in function arguments.
    John McCall 
    rjmccall at gmail.com
       
    Mon Dec 15 14:01:48 PST 2014
    
    
  
================
Comment at: lib/CodeGen/CodeGenFunction.h:2753
@@ +2752,3 @@
+        QualType ActualBaseType = ActualArgType;
+        while (ArgBaseType->isPointerType() &&
+               ActualBaseType->isPointerType()) {
----------------
Pointers aren't the only variably-modified type; you need to be able to look through functions types as well.  Something like::
  size_t test(int n, int (*(*fn)(void))[n])
And you're not looking through references, either.
But why not just have an exception for any variably-modified type?
================
Comment at: lib/CodeGen/CodeGenFunction.h:2757
@@ -2756,1 +2756,3 @@
+              ActualBaseType->getAs<PointerType>()->getPointeeType();
+          ArgBaseType = ArgBaseType->getAs<PointerType>()->getPointeeType();
           if (ArgBaseType->isVariableArrayType()) {
----------------
If you do keep this code, use castAs<> for casts that you know will succeed.
http://reviews.llvm.org/D6655
EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
    
    
More information about the cfe-commits
mailing list