[PATCH] D25373: Fix for Bug 30639: CGDebugInfo Null dereference with OpenMP array access

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 7 11:50:33 PDT 2016


Could you explain how/why there's a null size expr? I would've thought it
must have /some/ size for code generation purposes...

On Fri, Oct 7, 2016 at 11:33 AM Erich Keane <erich.keane at intel.com> wrote:

> erichkeane created this revision.
> erichkeane added reviewers: cfe-commits, dblaikie, majnemer, gbenyei.
> erichkeane set the repository for this revision to rL LLVM.
>
> OpenMP creates a variable array type with a a null size-expr.  The Debug
> generation failed to properly consider this case.  This patch adds a null
> check to prevent a null dereference seg-fault in this case, plus adds a
> test.
>
>
> Repository:
>   rL LLVM
>
> https://reviews.llvm.org/D25373
>
> Files:
>   lib/CodeGen/CGDebugInfo.cpp
>   test/CodeGenCXX/debug-info-openmp-array.cpp
>
>
> Index: lib/CodeGen/CGDebugInfo.cpp
> ===================================================================
> --- lib/CodeGen/CGDebugInfo.cpp
> +++ lib/CodeGen/CGDebugInfo.cpp
> @@ -2181,7 +2181,8 @@
>        Count = CAT->getSize().getZExtValue();
>      else if (const auto *VAT = dyn_cast<VariableArrayType>(Ty)) {
>        llvm::APSInt V;
> -      if (VAT->getSizeExpr()->EvaluateAsInt(V, CGM.getContext()))
> +      if (VAT->getSizeExpr() &&
> +          VAT->getSizeExpr()->EvaluateAsInt(V, CGM.getContext()))
>          Count = V.getExtValue();
>      }
>
> Index: test/CodeGenCXX/debug-info-openmp-array.cpp
> ===================================================================
> --- test/CodeGenCXX/debug-info-openmp-array.cpp
> +++ test/CodeGenCXX/debug-info-openmp-array.cpp
> @@ -0,0 +1,17 @@
> +// RUN: %clang -target x86_64-unknown-unknown -fverbose-asm -fopenmp -g
> -O0 -S -emit-llvm %s -o - | FileCheck %s
> +
> +
> +void f(int m) {
> +  int i;
> +  int cen[m];
> +#pragma omp parallel for
> +  for (i = 0; i < m; ++i) {
> +    cen[i] = i;
> +  }
> +}
> +
> +// CHECK: !DICompositeType(tag: DW_TAG_array_type,
> +// CHECK-NOT: size:
> +// CHECK-SAME: align: 32
> +// CHECK-SAME:                              elements:
> [[ELEM_TYPE:![0-9]+]]
> +// CHECK: !DISubrange(count: -1)
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161007/3b6a2016/attachment.html>


More information about the cfe-commits mailing list