Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[DebugInfo] Add support for __fp16, float, and double constants.
Summary: Partial fix for PR26619. Prior to this change, a DIGlobalVariable corresponding to a static const was marked with an expression corresponding to its constant value only if it is of integral type. With this change, we now do the same if it is of __fp16, float, or double type (that is, floating-point types that do not exceed 64 bits in size, and hence are supported easily by the existing LLVM machinery for creating constant expressions in debug info). Reviewers: llvm-commits Differential Revision: https://reviews.llvm.org/D27549 llvm-svn: 289094
- Loading branch information
Showing
2 changed files
with
30 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// RUN: %clang -emit-llvm -O0 -S -g %s -o - | FileCheck %s | ||
|
||
// Per PR26619, check that for referenced static const of floating-point type, | ||
// we emit its constant value in debug info. NOTE that PR26619 is not yet fixed for long double. | ||
|
||
static const __fp16 hVal = 29/13.0f; // 2.2307692307692307692 (2.23046875) | ||
|
||
static const float fVal = -147/17.0f; // -8.6470588235294117647 (-8.64705849) | ||
|
||
static const double dVal = 19637/7.0; // 2805.2857142857142857 (2805.2857142857142) | ||
|
||
static const long double ldVal = 3/1234567.0L; // 2.4300017739012949479e-06 (<optimized out>) | ||
|
||
int main() { | ||
return hVal + fVal + dVal + ldVal; | ||
} | ||
|
||
// CHECK: !DIGlobalVariable(name: "hVal", {{.*}}, isLocal: true, isDefinition: true, expr: ![[HEXPR:[0-9]+]] | ||
// CHECK: ![[HEXPR]] = !DIExpression(DW_OP_constu, 16502, DW_OP_stack_value) | ||
|
||
// CHECK: !DIGlobalVariable(name: "fVal", {{.*}}, isLocal: true, isDefinition: true, expr: ![[FEXPR:[0-9]+]] | ||
// CHECK: ![[FEXPR]] = !DIExpression(DW_OP_constu, 3238681178, DW_OP_stack_value) | ||
|
||
// CHECK: !DIGlobalVariable(name: "dVal", {{.*}}, isLocal: true, isDefinition: true, expr: ![[DEXPR:[0-9]+]] | ||
// CHECK: ![[DEXPR]] = !DIExpression(DW_OP_constu, 4658387303597904457, DW_OP_stack_value) | ||
|
||
// CHECK: !DIGlobalVariable(name: "ldVal", {{.*}}, isLocal: true, isDefinition: true) |