~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/DebugInfo/X86/debug-info-static-member.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: llc %s -o %t -filetype=obj -O0 -mtriple=x86_64-unknown-linux-gnu -dwarf-version=4
 
2
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=PRESENT 
 
3
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=ABSENT
 
4
; RUN: llc %s -o %t -filetype=obj -O0 -mtriple=x86_64-apple-darwin -dwarf-version=4
 
5
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DARWINP
 
6
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DARWINA
 
7
; Verify that attributes we do want are PRESENT;
 
8
; verify that attributes we don't want are ABSENT.
 
9
; It's a lot easier to do this in two passes than in one.
 
10
; PR14471
 
11
 
 
12
; LLVM IR generated using: clang -emit-llvm -S -g
 
13
; (with the Clang part of this patch applied).
 
14
;
 
15
; class C
 
16
; {
 
17
;   static int a;
 
18
;   const static bool const_a = true;
 
19
; protected:
 
20
;   static int b;
 
21
;   const static float const_b = 3.14;
 
22
; public:
 
23
;   static int c;
 
24
;   const static int const_c = 18;
 
25
;   int d;
 
26
; };
 
27
 
28
; int C::a = 4;
 
29
; int C::b = 2;
 
30
; int C::c = 1;
 
31
 
32
; int main()
 
33
; {
 
34
;         C instance_C;
 
35
;         instance_C.d = 8;
 
36
;         return C::c;
 
37
; }
 
38
 
 
39
%class.C = type { i32 }
 
40
 
 
41
@_ZN1C1aE = global i32 4, align 4
 
42
@_ZN1C1bE = global i32 2, align 4
 
43
@_ZN1C1cE = global i32 1, align 4
 
44
 
 
45
define i32 @main() nounwind uwtable {
 
46
entry:
 
47
  %retval = alloca i32, align 4
 
48
  %instance_C = alloca %class.C, align 4
 
49
  store i32 0, i32* %retval
 
50
  call void @llvm.dbg.declare(metadata %class.C* %instance_C, metadata !29, metadata !DIExpression()), !dbg !30
 
51
  %d = getelementptr inbounds %class.C, %class.C* %instance_C, i32 0, i32 0, !dbg !31
 
52
  store i32 8, i32* %d, align 4, !dbg !31
 
53
  %0 = load i32, i32* @_ZN1C1cE, align 4, !dbg !32
 
54
  ret i32 %0, !dbg !32
 
55
}
 
56
 
 
57
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
 
58
 
 
59
!llvm.dbg.cu = !{!0}
 
60
!llvm.module.flags = !{!34}
 
61
 
 
62
!0 = !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.3 (trunk 171914)", isOptimized: false, emissionKind: 0, file: !33, enums: !1, retainedTypes: !1, subprograms: !3, globals: !10, imports:  !1)
 
63
!1 = !{}
 
64
!3 = !{!5}
 
65
!5 = !DISubprogram(name: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 23, file: !33, scope: !6, type: !7, function: i32 ()* @main, variables: !1)
 
66
!6 = !DIFile(filename: "/usr/local/google/home/blaikie/Development/llvm/src/tools/clang/test/CodeGenCXX/debug-info-static-member.cpp", directory: "/home/blaikie/local/Development/llvm/build/clang/x86-64/Debug/llvm")
 
67
!7 = !DISubroutineType(types: !8)
 
68
!8 = !{!9}
 
69
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
 
70
!10 = !{!12, !27, !28}
 
71
!12 = !DIGlobalVariable(name: "a", linkageName: "_ZN1C1aE", line: 14, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @_ZN1C1aE, declaration: !15)
 
72
!13 = !DICompositeType(tag: DW_TAG_class_type, name: "C", line: 1, size: 32, align: 32, file: !33, elements: !14)
 
73
!14 = !{!15, !16, !19, !20, !23, !24, !26}
 
74
!15 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 3, flags: DIFlagPrivate | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
 
75
!16 = !DIDerivedType(tag: DW_TAG_member, name: "const_a", line: 4, flags: DIFlagPrivate | DIFlagStaticMember, file: !33, scope: !13, baseType: !17, extraData: i1 true)
 
76
!17 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !18)
 
77
!18 = !DIBasicType(tag: DW_TAG_base_type, name: "bool", size: 8, align: 8, encoding: DW_ATE_boolean)
 
78
!19 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 6, flags: DIFlagProtected | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
 
79
!20 = !DIDerivedType(tag: DW_TAG_member, name: "const_b", line: 7, flags: DIFlagProtected | DIFlagStaticMember, file: !33, scope: !13, baseType: !21, extraData: float 0x40091EB860000000)
 
80
!21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22)
 
81
!22 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
 
82
!23 = !DIDerivedType(tag: DW_TAG_member, name: "c", line: 9, flags: DIFlagPublic | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
 
83
!24 = !DIDerivedType(tag: DW_TAG_member, name: "const_c", line: 10, flags: DIFlagPublic | DIFlagStaticMember, file: !33, scope: !13, baseType: !25, extraData: i32 18)
 
84
!25 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !9)
 
85
!26 = !DIDerivedType(tag: DW_TAG_member, name: "d", line: 11, size: 32, align: 32, flags: DIFlagPublic, file: !33, scope: !13, baseType: !9)
 
86
!27 = !DIGlobalVariable(name: "b", linkageName: "_ZN1C1bE", line: 15, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @_ZN1C1bE, declaration: !19)
 
87
!28 = !DIGlobalVariable(name: "c", linkageName: "_ZN1C1cE", line: 16, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @_ZN1C1cE, declaration: !23)
 
88
!29 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "instance_C", line: 20, scope: !5, file: !6, type: !13)
 
89
!30 = !DILocation(line: 20, scope: !5)
 
90
!31 = !DILocation(line: 21, scope: !5)
 
91
!32 = !DILocation(line: 22, scope: !5)
 
92
!33 = !DIFile(filename: "/usr/local/google/home/blaikie/Development/llvm/src/tools/clang/test/CodeGenCXX/debug-info-static-member.cpp", directory: "/home/blaikie/local/Development/llvm/build/clang/x86-64/Debug/llvm")
 
93
; PRESENT verifies that static member declarations have these attributes:
 
94
; external, declaration, accessibility, and either DW_AT_linkage_name
 
95
; (for variables) or DW_AT_const_value (for constants).
 
96
;
 
97
; PRESENT:      .debug_info contents:
 
98
; PRESENT:      DW_TAG_variable
 
99
; PRESENT-NEXT: DW_AT_specification {{.*}} "a"
 
100
; PRESENT-NEXT: DW_AT_location
 
101
; PRESENT-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1aE"
 
102
; PRESENT:      DW_TAG_class_type
 
103
; PRESENT-NEXT: DW_AT_name {{.*}} "C"
 
104
; PRESENT:      DW_TAG_member
 
105
; PRESENT-NEXT: DW_AT_name {{.*}} "a"
 
106
; PRESENT:      DW_AT_external
 
107
; PRESENT:      DW_AT_declaration
 
108
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
 
109
; PRESENT:      DW_TAG_member
 
110
; PRESENT-NEXT: DW_AT_name {{.*}} "const_a"
 
111
; PRESENT:      DW_AT_external
 
112
; PRESENT:      DW_AT_declaration
 
113
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
 
114
; PRESENT:      DW_AT_const_value {{.*}} (1)
 
115
; PRESENT:      DW_TAG_member
 
116
; PRESENT-NEXT: DW_AT_name {{.*}} "b"
 
117
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
 
118
; PRESENT:      DW_TAG_member
 
119
; PRESENT-NEXT: DW_AT_name {{.*}} "const_b"
 
120
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
 
121
; PRESENT:      DW_AT_const_value [DW_FORM_udata] (1078523331)
 
122
; PRESENT:      DW_TAG_member
 
123
; PRESENT-NEXT: DW_AT_name {{.*}} "c"
 
124
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
 
125
; PRESENT:      DW_TAG_member
 
126
; PRESENT-NEXT: DW_AT_name {{.*}} "const_c"
 
127
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
 
128
; PRESENT:      DW_AT_const_value {{.*}} (18)
 
129
; While we're here, a normal member has data_member_location and
 
130
; accessibility attributes.
 
131
; PRESENT:      DW_TAG_member
 
132
; PRESENT-NEXT: DW_AT_name {{.*}} "d"
 
133
; PRESENT:      DW_AT_data_member_location
 
134
; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
 
135
; PRESENT:      NULL
 
136
; Definitions point back to their declarations, and have a location.
 
137
; PRESENT:      DW_TAG_variable
 
138
; PRESENT-NEXT: DW_AT_specification {{.*}} "b"
 
139
; PRESENT-NEXT: DW_AT_location
 
140
; PRESENT-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1bE"
 
141
; PRESENT:      DW_TAG_variable
 
142
; PRESENT-NEXT: DW_AT_specification {{.*}} "c"
 
143
; PRESENT-NEXT: DW_AT_location
 
144
; PRESENT-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1cE"
 
145
 
 
146
; For Darwin gdb:
 
147
; DARWINP:      .debug_info contents:
 
148
; DARWINP:      DW_TAG_variable
 
149
; DARWINP-NEXT: DW_AT_specification {{.*}} "a"
 
150
; DARWINP-NEXT: DW_AT_location
 
151
; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1aE"
 
152
; DARWINP:      DW_TAG_class_type
 
153
; DARWINP-NEXT: DW_AT_name {{.*}} "C"
 
154
; DARWINP:      DW_TAG_member
 
155
; DARWINP-NEXT: DW_AT_name {{.*}} "a"
 
156
; DARWINP:      DW_AT_external
 
157
; DARWINP:      DW_AT_declaration
 
158
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
 
159
; DARWINP:      DW_TAG_member
 
160
; DARWINP-NEXT: DW_AT_name {{.*}} "const_a"
 
161
; DARWINP:      DW_AT_external
 
162
; DARWINP:      DW_AT_declaration
 
163
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
 
164
; DARWINP:      DW_AT_const_value {{.*}} (1)
 
165
; DARWINP:      DW_TAG_member
 
166
; DARWINP-NEXT: DW_AT_name {{.*}} "b"
 
167
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
 
168
; DARWINP:      DW_TAG_member
 
169
; DARWINP-NEXT: DW_AT_name {{.*}} "const_b"
 
170
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
 
171
; DARWINP:      DW_AT_const_value [DW_FORM_udata] (1078523331)
 
172
; DARWINP:      DW_TAG_member
 
173
; DARWINP-NEXT: DW_AT_name {{.*}} "c"
 
174
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
 
175
; DARWINP:      DW_TAG_member
 
176
; DARWINP-NEXT: DW_AT_name {{.*}} "const_c"
 
177
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
 
178
; DARWINP:      DW_AT_const_value {{.*}} (18)
 
179
; While we're here, a normal member has data_member_location and
 
180
; accessibility attributes.
 
181
; DARWINP:      DW_TAG_member
 
182
; DARWINP-NEXT: DW_AT_name {{.*}} "d"
 
183
; DARWINP:      DW_AT_data_member_location
 
184
; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
 
185
; DARWINP:      NULL
 
186
; Definitions point back to their declarations, and have a location.
 
187
; DARWINP:      DW_TAG_variable
 
188
; DARWINP-NEXT: DW_AT_specification {{.*}} "b"
 
189
; DARWINP-NEXT: DW_AT_location
 
190
; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1bE"
 
191
; DARWINP:      DW_TAG_variable
 
192
; DARWINP-NEXT: DW_AT_specification {{.*}} "c"
 
193
; DARWINP-NEXT: DW_AT_location
 
194
; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1cE"
 
195
 
 
196
; ABSENT verifies that static member declarations do not have either
 
197
; DW_AT_location or DW_AT_data_member_location; also, variables do not
 
198
; have DW_AT_const_value and constants do not have DW_AT_linkage_name.
 
199
;
 
200
; ABSENT:      .debug_info contents:
 
201
; ABSENT:      DW_TAG_member
 
202
; ABSENT:      DW_AT_name {{.*}} "a"
 
203
; ABSENT-NOT:  DW_AT_const_value
 
204
; ABSENT-NOT:  location
 
205
; ABSENT:      DW_AT_name {{.*}} "const_a"
 
206
; ABSENT-NOT:  DW_AT_linkage_name
 
207
; ABSENT-NOT:  location
 
208
; ABSENT:      DW_AT_name {{.*}} "b"
 
209
; ABSENT-NOT:  DW_AT_const_value
 
210
; ABSENT-NOT:  location
 
211
; ABSENT:      DW_AT_name {{.*}} "const_b"
 
212
; ABSENT-NOT:  DW_AT_linkage_name
 
213
; ABSENT-NOT:  location
 
214
; ABSENT:      DW_AT_name {{.*}} "c"
 
215
; ABSENT-NOT:  DW_AT_const_value
 
216
; ABSENT-NOT:  location
 
217
; ABSENT:      DW_AT_name {{.*}} "const_c"
 
218
; ABSENT-NOT:  DW_AT_linkage_name
 
219
; ABSENT-NOT:  location
 
220
; While we're here, a normal member does not have a linkage name, constant
 
221
; value, or DW_AT_location.
 
222
; ABSENT:      DW_AT_name {{.*}} "d"
 
223
; ABSENT-NOT:  DW_AT_linkage_name
 
224
; ABSENT-NOT:  DW_AT_const_value
 
225
; ABSENT-NOT:  DW_AT_location
 
226
; ABSENT:      NULL
 
227
 
 
228
; For Darwin gdb:
 
229
; DARWINA:      .debug_info contents:
 
230
; DARWINA:      DW_TAG_member
 
231
; DARWINA:      DW_AT_name {{.*}} "a"
 
232
; DARWINA-NOT:  DW_AT_const_value
 
233
; DARWINA-NOT:  location
 
234
; DARWINA:      DW_AT_name {{.*}} "const_a"
 
235
; DARWINA-NOT:  DW_AT_linkage_name
 
236
; DARWINA-NOT:  location
 
237
; DARWINA:      DW_AT_name {{.*}} "b"
 
238
; DARWINA-NOT:  DW_AT_const_value
 
239
; DARWINA-NOT:  location
 
240
; DARWINA:      DW_AT_name {{.*}} "const_b"
 
241
; DARWINA-NOT:  DW_AT_linkage_name
 
242
; DARWINA-NOT:  location
 
243
; DARWINA:      DW_AT_name {{.*}} "c"
 
244
; DARWINA-NOT:  DW_AT_const_value
 
245
; DARWINA-NOT:  location
 
246
; DARWINA:      DW_AT_name {{.*}} "const_c"
 
247
; DARWINA-NOT:  DW_AT_linkage_name
 
248
; DARWINA-NOT:  location
 
249
; While we're here, a normal member does not have a linkage name, constant
 
250
; value, or DW_AT_location.
 
251
; DARWINA:      DW_AT_name {{.*}} "d"
 
252
; DARWINA-NOT:  DW_AT_linkage_name
 
253
; DARWINA-NOT:  DW_AT_const_value
 
254
; DARWINA-NOT:  DW_AT_location
 
255
; DARWINA:      NULL
 
256
!34 = !{i32 1, !"Debug Info Version", i32 3}