From 5879ee1ecaa5738d93613c7bd14bdd09ab48450d Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Thu, 14 Apr 2016 13:02:47 +0200 Subject: [PATCH] Distinguish different `vfp?` features The different generations of ARM floating point VFP correspond to the LLVM CPU features named `vfp2`, `vfp3`, and `vfp4`; they are now exposed in Rust under the same names. This commit fixes some crashes that would occour when checking if the `vfp` feature exists (the crash occurs because the linear scan of the LLVM feature goes past the end of the features whenever it searches for a feature that does not exist in the LLVM tables). --- src/librustc_driver/target_features.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/librustc_driver/target_features.rs b/src/librustc_driver/target_features.rs index 7f4375e993dae..73b2b85a352ad 100644 --- a/src/librustc_driver/target_features.rs +++ b/src/librustc_driver/target_features.rs @@ -24,9 +24,15 @@ use libc::c_char; pub fn add_configuration(cfg: &mut ast::CrateConfig, sess: &Session) { let target_machine = create_target_machine(sess); + // WARNING: the features must be known to LLVM or the feature + // detection code will walk past the end of the feature array, + // leading to crashes. + let arm_whitelist = [ "neon\0", - "vfp\0", + "vfp2\0", + "vfp3\0", + "vfp4\0", ]; let x86_whitelist = [