diff options
| author | Andrew Gallant <jamslam@gmail.com> | 2014-06-04 16:59:27 -0400 |
|---|---|---|
| committer | Andrew Gallant <jamslam@gmail.com> | 2014-06-04 16:59:27 -0400 |
| commit | 0f73bf32fe7d4e805f2bd16e3d6de66e90b3d3bf (patch) | |
| tree | 106d770ce65b797188da2530140498826e16b4c3 | |
| parent | a6401b52263336c22879d4ffae3eded97949ee7b (diff) | |
| download | rust-0f73bf32fe7d4e805f2bd16e3d6de66e90b3d3bf.tar.gz rust-0f73bf32fe7d4e805f2bd16e3d6de66e90b3d3bf.zip | |
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.
| -rw-r--r-- | src/libregex_macros/lib.rs | 9 | ||||
| -rw-r--r-- | src/test/compile-fail-fulldeps/syntax-extension-regex-unused-static.rs | 32 | ||||
| -rw-r--r-- | src/test/compile-fail-fulldeps/syntax-extension-regex-unused.rs | 28 |
3 files changed, 69 insertions, 0 deletions
diff --git a/src/libregex_macros/lib.rs b/src/libregex_macros/lib.rs index 71e3d06cf96..ca64db3e2f7 100644 --- a/src/libregex_macros/lib.rs +++ b/src/libregex_macros/lib.rs @@ -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, diff --git a/src/test/compile-fail-fulldeps/syntax-extension-regex-unused-static.rs b/src/test/compile-fail-fulldeps/syntax-extension-regex-unused-static.rs new file mode 100644 index 00000000000..300e7e524df --- /dev/null +++ b/src/test/compile-fail-fulldeps/syntax-extension-regex-unused-static.rs @@ -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` +} diff --git a/src/test/compile-fail-fulldeps/syntax-extension-regex-unused.rs b/src/test/compile-fail-fulldeps/syntax-extension-regex-unused.rs new file mode 100644 index 00000000000..c77bd52d9e5 --- /dev/null +++ b/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` +} |
