@@ -133,38 +133,7 @@ fn make_mir_scope<'gcc, 'tcx>(
133
133
134
134
let loc = cx. lookup_debug_loc ( scope_data. span . lo ( ) ) ;
135
135
136
- /*
137
- // FIXME(?): Uncommented when the scope is supported.
138
- let file_metadata = file_metadata(cx, &loc.file);
139
-
140
- let parent_dbg_scope = match scope_data.inlined {
141
- Some((callee, _)) => {
142
- // FIXME(eddyb) this would be `self.monomorphize(&callee)`
143
- // if this is moved to `rustc_codegen_ssa::mir::debuginfo`.
144
- let callee = cx.tcx.instantiate_and_normalize_erasing_regions(
145
- instance.args,
146
- ty::ParamEnv::reveal_all(),
147
- ty::EarlyBinder::bind(callee),
148
- );
149
- debug_context.inlined_function_scopes.entry(callee).or_insert_with(|| {
150
- let callee_fn_abi = cx.fn_abi_of_instance(callee, ty::List::empty());
151
- cx.dbg_scope_fn(callee, callee_fn_abi, None)
152
- })
153
- }
154
- None => parent_scope.dbg_scope,
155
- };
156
-
157
- let dbg_scope = unsafe {
158
- llvm::LLVMRustDIBuilderCreateLexicalBlock(
159
- DIB(cx),
160
- parent_dbg_scope,
161
- file_metadata,
162
- loc.line,
163
- loc.col,
164
- )
165
- };
166
- */
167
-
136
+ // FIXME(tempdragon): Add the scope related code here if the scope is supported.
168
137
let dbg_scope = ( ) ;
169
138
170
139
let inlined_at = scope_data. inlined . map ( |( _, callsite_span) | {
@@ -180,36 +149,52 @@ fn make_mir_scope<'gcc, 'tcx>(
180
149
debug_context. scopes [ scope] = DebugScope {
181
150
dbg_scope,
182
151
inlined_at,
183
- file_start_pos : loc. 0 . start_pos ,
184
- file_end_pos : loc. 0 . end_position ( ) ,
152
+ file_start_pos : loc. file . start_pos ,
153
+ file_end_pos : loc. file . end_position ( ) ,
185
154
} ;
186
155
instantiated. insert ( scope) ;
187
156
}
188
157
158
+ /// A source code location used to generate debug information.
159
+ // FIXME(eddyb) rename this to better indicate it's a duplicate of
160
+ // `rustc_span::Loc` rather than `DILocation`, perhaps by making
161
+ // `lookup_char_pos` return the right information instead.
162
+ pub struct DebugLoc {
163
+ /// Information about the original source file.
164
+ pub file : Lrc < SourceFile > ,
165
+ /// The (1-based) line number.
166
+ pub line : u32 ,
167
+ /// The (1-based) column number.
168
+ pub col : u32 ,
169
+ }
170
+
189
171
impl < ' gcc , ' tcx > CodegenCx < ' gcc , ' tcx > {
190
- /// Look up the file, the 1-based indexing line number and column number.
191
- /// # Argument
192
- /// - `pos`: `BytePos`, the starting position of a piece of code
193
- /// # Source of Origin
194
- /// Copied from LLVM backend(with a return type from struct to tuple).
195
- /// No need to change since you may end up something like this.
196
- pub fn lookup_debug_loc ( & self , pos : BytePos ) -> ( Lrc < SourceFile > , u32 , u32 ) {
197
- match self . sess ( ) . source_map ( ) . lookup_line ( pos) {
172
+ /// Looks up debug source information about a `BytePos`.
173
+ // FIXME(eddyb) rename this to better indicate it's a duplicate of
174
+ // `lookup_char_pos` rather than `dbg_loc`, perhaps by making
175
+ // `lookup_char_pos` return the right information instead.
176
+ // Source of Origin: cg_llvm
177
+ pub fn lookup_debug_loc ( & self , pos : BytePos ) -> DebugLoc {
178
+ let ( file, line, col) = match self . sess ( ) . source_map ( ) . lookup_line ( pos) {
198
179
Ok ( SourceFileAndLine { sf : file, line } ) => {
199
180
let line_pos = file. lines ( ) [ line] ;
200
181
201
182
// Use 1-based indexing.
202
183
let line = ( line + 1 ) as u32 ;
203
184
let col = ( file. relative_position ( pos) - line_pos) . to_u32 ( ) + 1 ;
204
- ( file,
205
- line,
206
- if ! self . sess ( ) . target . is_like_msvc {
207
- col } else {
208
- UNKNOWN_COLUMN_NUMBER
209
- }
210
- )
185
+
186
+ ( file, line, col)
211
187
}
212
188
Err ( file) => ( file, UNKNOWN_LINE_NUMBER , UNKNOWN_COLUMN_NUMBER ) ,
189
+ } ;
190
+
191
+ // For MSVC, omit the column number.
192
+ // Otherwise, emit it. This mimics clang behaviour.
193
+ // See discussion in https://github.com/rust-lang/rust/issues/42921
194
+ if self . sess ( ) . target . is_like_msvc {
195
+ DebugLoc { file, line, col : UNKNOWN_COLUMN_NUMBER }
196
+ } else {
197
+ DebugLoc { file, line, col }
213
198
}
214
199
}
215
200
}
@@ -293,7 +278,7 @@ impl<'gcc, 'tcx> DebugInfoMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
293
278
span : Span ,
294
279
) -> Self :: DILocation {
295
280
let pos = span. lo ( ) ;
296
- let ( file, line, col) = self . lookup_debug_loc ( pos) ;
281
+ let DebugLoc { file, line, col} = self . lookup_debug_loc ( pos) ;
297
282
let loc = match & file. name {
298
283
rustc_span:: FileName :: Real ( name) => match name {
299
284
rustc_span:: RealFileName :: LocalPath ( name) => {
0 commit comments