[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