jdoerfert created this revision.
jdoerfert added reviewers: ye-luo, JonChesterfield, jhuber6.
Herald added subscribers: guansong, bollu, yaxunl.
jdoerfert requested review of this revision.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.
The `EmitDeclareOfAutoVariable` introduced in D114504
<https://reviews.llvm.org/D114504> and D115510
<https://reviews.llvm.org/D115510> has a
precondition that cannot be violated. It is unclear if we should call it
directly given the sparse usage in clang but for now we should at least
not crash if the debug info kind is too low.
Fixes #52938.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D116865
Files:
clang/lib/CodeGen/CGStmtOpenMP.cpp
clang/test/OpenMP/debug_private.c
clang/test/OpenMP/debug_task_shared.c
Index: clang/test/OpenMP/debug_task_shared.c
===================================================================
--- clang/test/OpenMP/debug_task_shared.c
+++ clang/test/OpenMP/debug_task_shared.c
@@ -5,6 +5,9 @@
// RUN: %clang_cc1 -debug-info-kind=constructor -DSHARED -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=CHECK
// RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=line-directives-only -DSHARED -x c -verify
-triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=line-tables-only -DSHARED -x c -verify
-triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=limited -DSHARED -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=CHECK
// expected-no-diagnostics
// CHECK-LABEL: define internal i32 @.omp_task_entry.
Index: clang/test/OpenMP/debug_private.c
===================================================================
--- clang/test/OpenMP/debug_private.c
+++ clang/test/OpenMP/debug_private.c
@@ -4,6 +4,9 @@
// REQUIRES: x86_64-linux
// RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -debug-info-kind=line-directives-only -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=line-tables-only -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
--check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=limited -x c -verify -triple
x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
// expected-no-diagnostics
// CHECK: define internal i32 @.omp_task_entry.
@@ -11,6 +14,7 @@
// CHECK: call void @llvm.dbg.declare(metadata i32** %.priv.ptr.addr.i,
metadata [[PRIV1:![0-9]+]], metadata !DIExpression(DW_OP_deref))
// CHECK: call void @llvm.dbg.declare(metadata i32** %.priv.ptr.addr1.i,
metadata [[PRIV2:![0-9]+]], metadata !DIExpression(DW_OP_deref))
// CHECK: call void @llvm.dbg.declare(metadata i32** %.firstpriv.ptr.addr.i,
metadata [[FPRIV:![0-9]+]], metadata !DIExpression(DW_OP_deref))
+// NEG-NOT: call void @llvm.dbg.declare
// CHECK: [[PRIV1]] = !DILocalVariable(name: "priv1"
// CHECK: [[PRIV2]] = !DILocalVariable(name: "priv2"
Index: clang/lib/CodeGen/CGStmtOpenMP.cpp
===================================================================
--- clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -4460,8 +4460,9 @@
CGF.getContext().getASTRecordLayout(CaptureRecord);
unsigned Offset =
Layout.getFieldOffset(It->second->getFieldIndex()) / CharWidth;
- (void)DI->EmitDeclareOfAutoVariable(SharedVar, ContextValue,
- CGF.Builder, false);
+ if (CGF.CGM.getCodeGenOpts().hasReducedDebugInfo())
+ (void)DI->EmitDeclareOfAutoVariable(SharedVar, ContextValue,
+ CGF.Builder, false);
llvm::Instruction &Last = CGF.Builder.GetInsertBlock()->back();
// Get the call dbg.declare instruction we just created and update
// its DIExpression to add offset to base address.
@@ -4560,8 +4561,9 @@
CGF.getContext().getDeclAlign(Pair.first));
Scope.addPrivate(Pair.first, [Replacement]() { return Replacement; });
if (auto *DI = CGF.getDebugInfo())
- DI->EmitDeclareOfAutoVariable(Pair.first, Pair.second.getPointer(),
- CGF.Builder, /*UsePointerValue*/ true);
+ if (CGF.CGM.getCodeGenOpts().hasReducedDebugInfo())
+ (void)DI->EmitDeclareOfAutoVariable(Pair.first,
Pair.second.getPointer(),
+ CGF.Builder, /*UsePointerValue*/
true);
}
// Adjust mapping for internal locals by mapping actual memory instead of
// a pointer to this memory.
Index: clang/test/OpenMP/debug_task_shared.c
===================================================================
--- clang/test/OpenMP/debug_task_shared.c
+++ clang/test/OpenMP/debug_task_shared.c
@@ -5,6 +5,9 @@
// RUN: %clang_cc1 -debug-info-kind=constructor -DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK
// RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=line-directives-only -DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=line-tables-only -DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=limited -DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK
// expected-no-diagnostics
// CHECK-LABEL: define internal i32 @.omp_task_entry.
Index: clang/test/OpenMP/debug_private.c
===================================================================
--- clang/test/OpenMP/debug_private.c
+++ clang/test/OpenMP/debug_private.c
@@ -4,6 +4,9 @@
// REQUIRES: x86_64-linux
// RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -debug-info-kind=line-directives-only -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=line-tables-only -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=NEG
+// RUN: %clang_cc1 -debug-info-kind=limited -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
// expected-no-diagnostics
// CHECK: define internal i32 @.omp_task_entry.
@@ -11,6 +14,7 @@
// CHECK: call void @llvm.dbg.declare(metadata i32** %.priv.ptr.addr.i, metadata [[PRIV1:![0-9]+]], metadata !DIExpression(DW_OP_deref))
// CHECK: call void @llvm.dbg.declare(metadata i32** %.priv.ptr.addr1.i, metadata [[PRIV2:![0-9]+]], metadata !DIExpression(DW_OP_deref))
// CHECK: call void @llvm.dbg.declare(metadata i32** %.firstpriv.ptr.addr.i, metadata [[FPRIV:![0-9]+]], metadata !DIExpression(DW_OP_deref))
+// NEG-NOT: call void @llvm.dbg.declare
// CHECK: [[PRIV1]] = !DILocalVariable(name: "priv1"
// CHECK: [[PRIV2]] = !DILocalVariable(name: "priv2"
Index: clang/lib/CodeGen/CGStmtOpenMP.cpp
===================================================================
--- clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -4460,8 +4460,9 @@
CGF.getContext().getASTRecordLayout(CaptureRecord);
unsigned Offset =
Layout.getFieldOffset(It->second->getFieldIndex()) / CharWidth;
- (void)DI->EmitDeclareOfAutoVariable(SharedVar, ContextValue,
- CGF.Builder, false);
+ if (CGF.CGM.getCodeGenOpts().hasReducedDebugInfo())
+ (void)DI->EmitDeclareOfAutoVariable(SharedVar, ContextValue,
+ CGF.Builder, false);
llvm::Instruction &Last = CGF.Builder.GetInsertBlock()->back();
// Get the call dbg.declare instruction we just created and update
// its DIExpression to add offset to base address.
@@ -4560,8 +4561,9 @@
CGF.getContext().getDeclAlign(Pair.first));
Scope.addPrivate(Pair.first, [Replacement]() { return Replacement; });
if (auto *DI = CGF.getDebugInfo())
- DI->EmitDeclareOfAutoVariable(Pair.first, Pair.second.getPointer(),
- CGF.Builder, /*UsePointerValue*/ true);
+ if (CGF.CGM.getCodeGenOpts().hasReducedDebugInfo())
+ (void)DI->EmitDeclareOfAutoVariable(Pair.first, Pair.second.getPointer(),
+ CGF.Builder, /*UsePointerValue*/ true);
}
// Adjust mapping for internal locals by mapping actual memory instead of
// a pointer to this memory.
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits