Fixes #14185.
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.
This commit is contained in:
@@ -142,11 +142,20 @@ impl<'a> NfaGen<'a> {
|
|||||||
let regex = self.original.as_slice();
|
let regex = self.original.as_slice();
|
||||||
|
|
||||||
quote_expr!(self.cx, {
|
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;
|
static CAP_NAMES: &'static [Option<&'static str>] = &$cap_names;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn exec<'t>(which: ::regex::native::MatchKind, input: &'t str,
|
fn exec<'t>(which: ::regex::native::MatchKind, input: &'t str,
|
||||||
start: uint, end: uint) -> Vec<Option<uint>> {
|
start: uint, end: uint) -> Vec<Option<uint>> {
|
||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
#![allow(unused_mut)]
|
#![allow(unused_mut)]
|
||||||
|
|
||||||
use regex::native::{
|
use regex::native::{
|
||||||
MatchKind, Exists, Location, Submatches,
|
MatchKind, Exists, Location, Submatches,
|
||||||
StepState, StepMatchEarlyReturn, StepMatch, StepContinue,
|
StepState, StepMatchEarlyReturn, StepMatch, StepContinue,
|
||||||
|
|||||||
@@ -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`
|
||||||
|
}
|
||||||
@@ -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`
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user