@@ -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,12 @@ 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" ) {
214
+ if let InstanceDef :: Item ( def_id ) = instance. def {
215
+ if cx . tcx . trans_fn_attrs ( def_id ) . flags . contains ( TransFnAttrFlags :: NO_DEBUG ) {
215
216
return FunctionDebugContext :: FunctionWithoutDebugInfo ;
216
217
}
217
218
}
218
219
219
- let containing_scope = get_containing_scope ( cx, instance) ;
220
220
let span = mir. span ;
221
221
222
222
// This can be the case for functions inlined from another crate
@@ -226,6 +226,7 @@ pub fn create_function_debug_context<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
226
226
}
227
227
228
228
let def_id = instance. def_id ( ) ;
229
+ let containing_scope = get_containing_scope ( cx, instance) ;
229
230
let loc = span_start ( cx, span) ;
230
231
let file_metadata = file_metadata ( cx, & loc. file . name , def_id. krate ) ;
231
232
0 commit comments