@@ -23,14 +23,15 @@ use self::source_loc::InternalDebugLocation::{self, UnknownLocation};
23
23
use llvm;
24
24
use llvm:: { ModuleRef , ContextRef , ValueRef } ;
25
25
use llvm:: debuginfo:: { DIFile , DIType , DIScope , DIBuilderRef , DISubprogram , DIArray , DIFlags } ;
26
+ use rustc:: hir:: TransFnAttrFlags ;
26
27
use rustc:: hir:: def_id:: { DefId , CrateNum } ;
27
28
use rustc:: ty:: subst:: Substs ;
28
29
29
30
use abi:: Abi ;
30
31
use common:: CodegenCx ;
31
32
use builder:: Builder ;
32
33
use monomorphize:: Instance ;
33
- use rustc:: ty:: { self , ParamEnv , Ty } ;
34
+ use rustc:: ty:: { self , ParamEnv , Ty , InstanceDef } ;
34
35
use rustc:: mir;
35
36
use rustc:: session:: config:: { self , FullDebugInfo , LimitedDebugInfo , NoDebugInfo } ;
36
37
use rustc:: util:: nodemap:: { DefIdMap , FxHashMap , FxHashSet } ;
@@ -210,13 +211,16 @@ pub fn create_function_debug_context<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
210
211
return FunctionDebugContext :: DebugInfoDisabled ;
211
212
}
212
213
213
- for attr in instance. def . attrs ( cx. tcx ) . iter ( ) {
214
- if attr. check_name ( "no_debug" ) {
215
- return FunctionDebugContext :: FunctionWithoutDebugInfo ;
216
- }
214
+ let def_id = if let InstanceDef :: Item ( def_id) = instance. def {
215
+ def_id
216
+ } else {
217
+ return FunctionDebugContext :: FunctionWithoutDebugInfo ;
218
+ } ;
219
+
220
+ if cx. tcx . trans_fn_attrs ( def_id) . flags . contains ( TransFnAttrFlags :: NO_DEBUG ) {
221
+ return FunctionDebugContext :: FunctionWithoutDebugInfo ;
217
222
}
218
223
219
- let containing_scope = get_containing_scope ( cx, instance) ;
220
224
let span = mir. span ;
221
225
222
226
// This can be the case for functions inlined from another crate
@@ -225,7 +229,7 @@ pub fn create_function_debug_context<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
225
229
return FunctionDebugContext :: FunctionWithoutDebugInfo ;
226
230
}
227
231
228
- let def_id = instance . def_id ( ) ;
232
+ let containing_scope = get_containing_scope ( cx , instance ) ;
229
233
let loc = span_start ( cx, span) ;
230
234
let file_metadata = file_metadata ( cx, & loc. file . name , def_id. krate ) ;
231
235
0 commit comments