Skip to content

Commit

Permalink
debuginfo: Add a "no_debug" attribute that allows to exclude function…
Browse files Browse the repository at this point in the history
…s from debuginfo generation.
  • Loading branch information
michaelwoerister committed Aug 15, 2014
1 parent 1d12b6d commit 910dd26
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/librustc/lint/builtin.rs
Expand Up @@ -578,6 +578,7 @@ impl LintPass for UnusedAttribute {
"packed",
"static_assert",
"thread_local",
"no_debug",

// not used anywhere (!?) but apparently we want to keep them around
"comment",
Expand Down
26 changes: 26 additions & 0 deletions src/librustc/middle/trans/debuginfo.rs
Expand Up @@ -1128,6 +1128,10 @@ pub fn create_function_debug_context(cx: &CrateContext,

let (ident, fn_decl, generics, top_level_block, span, has_path) = match fnitem {
ast_map::NodeItem(ref item) => {
if contains_nodebug_attribute(item.attrs.as_slice()) {
return FunctionDebugContext { repr: FunctionWithoutDebugInfo };
}

match item.node {
ast::ItemFn(fn_decl, _, _, ref generics, top_level_block) => {
(item.ident, fn_decl, generics, top_level_block, item.span, true)
Expand All @@ -1141,6 +1145,12 @@ pub fn create_function_debug_context(cx: &CrateContext,
ast_map::NodeImplItem(ref item) => {
match **item {
ast::MethodImplItem(ref method) => {
if contains_nodebug_attribute(method.attrs.as_slice()) {
return FunctionDebugContext {
repr: FunctionWithoutDebugInfo
};
}

(method.pe_ident(),
method.pe_fn_decl(),
method.pe_generics(),
Expand Down Expand Up @@ -1173,6 +1183,12 @@ pub fn create_function_debug_context(cx: &CrateContext,
ast_map::NodeTraitItem(ref trait_method) => {
match **trait_method {
ast::ProvidedMethod(ref method) => {
if contains_nodebug_attribute(method.attrs.as_slice()) {
return FunctionDebugContext {
repr: FunctionWithoutDebugInfo
};
}

(method.pe_ident(),
method.pe_fn_decl(),
method.pe_generics(),
Expand Down Expand Up @@ -3169,6 +3185,16 @@ fn set_debug_location(cx: &CrateContext, debug_location: DebugLocation) {
// Utility Functions
//=-----------------------------------------------------------------------------

fn contains_nodebug_attribute(attributes: &[ast::Attribute]) -> bool {
attributes.iter().any(|attr| {
let meta_item: &ast::MetaItem = &*attr.node.value;
match meta_item.node {
ast::MetaWord(ref value) => value.get() == "no_debug",
_ => false
}
})
}

/// Return codemap::Loc corresponding to the beginning of the span
fn span_start(cx: &CrateContext, span: Span) -> codemap::Loc {
cx.sess().codemap().lookup_char_pos(span.lo)
Expand Down
45 changes: 45 additions & 0 deletions src/test/debuginfo/no-debug-attribute.rs
@@ -0,0 +1,45 @@
// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// ignore-android: FIXME(#10381)
// ignore-lldb

// compile-flags:-g

// gdb-command:break 'no-debug-attribute.rs':32
// gdb-command:break 'no-debug-attribute.rs':38
// gdb-command:run

// gdb-command:info locals
// gdb-check:No locals.
// gdb-command:continue

// gdb-command:info locals
// gdb-check:abc = 10
// gdb-command:continue

#![allow(unused_variable)]

fn function_with_debuginfo() {
let abc = 10u;
return (); // #break
}

#[no_debug]
fn function_without_debuginfo() {
let abc = -57i32;
return (); // #break
}

fn main() {
function_without_debuginfo();
function_with_debuginfo();
}

5 comments on commit 910dd26

@bors
Copy link
Contributor

@bors bors commented on 910dd26 Aug 15, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from pcwalton
at michaelwoerister@910dd26

@bors
Copy link
Contributor

@bors bors commented on 910dd26 Aug 15, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging michaelwoerister/rust/no_debug_attribute = 910dd26 into auto

@bors
Copy link
Contributor

@bors bors commented on 910dd26 Aug 15, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

michaelwoerister/rust/no_debug_attribute = 910dd26 merged ok, testing candidate = cafa475

@bors
Copy link
Contributor

@bors bors commented on 910dd26 Aug 15, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = cafa475

Please sign in to comment.