Skip to content

Commit

Permalink
Fixes #14185.
Browse files Browse the repository at this point in the history
This fix suppresses dead_code warnings from code generated by regex! when
the result of regex! is unused. Correct behavior should be a single
unused variable warning.

Regression tests are included for both `let` and `static` bound regex!
values.
  • Loading branch information
BurntSushi committed Jun 4, 2014
1 parent a6401b5 commit 0f73bf3
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/libregex_macros/lib.rs
Expand Up @@ -142,11 +142,20 @@ impl<'a> NfaGen<'a> {
let regex = self.original.as_slice();

quote_expr!(self.cx, {
// When `regex!` is bound to a name that is not used, we have to make sure
// that dead_code warnings don't bubble up to the user from the generated
// code. Therefore, we suppress them by allowing dead_code. The effect is that
// the user is only warned about *their* unused variable/code, and not the
// unused code generated by regex!. See #14185 for an example.
#[allow(dead_code)]
static CAP_NAMES: &'static [Option<&'static str>] = &$cap_names;

#[allow(dead_code)]
fn exec<'t>(which: ::regex::native::MatchKind, input: &'t str,
start: uint, end: uint) -> Vec<Option<uint>> {
#![allow(unused_imports)]
#![allow(unused_mut)]

use regex::native::{
MatchKind, Exists, Location, Submatches,
StepState, StepMatchEarlyReturn, StepMatch, StepContinue,
Expand Down
@@ -0,0 +1,32 @@
// Copyright 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.

// FIXME(#13725) windows needs fixing.
// ignore-win32
// ignore-stage1

#![feature(phase)]

extern crate regex;
#[phase(syntax)] extern crate regex_macros;

#[deny(unused_variable)]
#[deny(dead_code)]

// Tests to make sure that extraneous dead code warnings aren't emitted from
// the code generated by regex!.
//
// The warning used for `static` items seems to be dead_code, which is why this
// is a distinct test from using a normal let binding (which generates an
// unused variable warning).

fn main() {
static fubar: regex::Regex = regex!("abc"); //~ ERROR code is never used: `fubar`
}
28 changes: 28 additions & 0 deletions src/test/compile-fail-fulldeps/syntax-extension-regex-unused.rs
@@ -0,0 +1,28 @@
// Copyright 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.

// FIXME(#13725) windows needs fixing.
// ignore-win32
// ignore-stage1

#![feature(phase)]

extern crate regex;
#[phase(syntax)] extern crate regex_macros;

#[deny(unused_variable)]
#[deny(dead_code)]

// Tests to make sure that extraneous dead code warnings aren't emitted from
// the code generated by regex!.

fn main() {
let fubar = regex!("abc"); //~ ERROR unused variable: `fubar`
}

5 comments on commit 0f73bf3

@bors
Copy link
Contributor

@bors bors commented on 0f73bf3 Jun 5, 2014

Choose a reason for hiding this comment

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

saw approval from alexcrichton
at BurntSushi@0f73bf3

@bors
Copy link
Contributor

@bors bors commented on 0f73bf3 Jun 5, 2014

Choose a reason for hiding this comment

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

merging BurntSushi/rust/fix-14185 = 0f73bf3 into auto

@bors
Copy link
Contributor

@bors bors commented on 0f73bf3 Jun 5, 2014

Choose a reason for hiding this comment

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

BurntSushi/rust/fix-14185 = 0f73bf3 merged ok, testing candidate = 3ec321f

@bors
Copy link
Contributor

@bors bors commented on 0f73bf3 Jun 5, 2014

@bors
Copy link
Contributor

@bors bors commented on 0f73bf3 Jun 5, 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 = 3ec321f

Please sign in to comment.