diff --git a/src/librustc_trans/abi.rs b/src/librustc_trans/abi.rs index 35688eceef114..34c70525621b9 100644 --- a/src/librustc_trans/abi.rs +++ b/src/librustc_trans/abi.rs @@ -1062,7 +1062,11 @@ impl<'a, 'tcx> FnType<'tcx> { match scalar.value { layout::Int(..) if !scalar.is_bool() => { if let Some(range) = scalar.range_metadata(bx.cx) { - bx.range_metadata(callsite, range); + // FIXME(nox): This causes very weird type errors about + // SHL operators in constants in stage 2 with LLVM 3.9. + if unsafe { llvm::LLVMRustVersionMajor() >= 4 } { + bx.range_metadata(callsite, range); + } } } _ => {} diff --git a/src/test/codegen/call-metadata.rs b/src/test/codegen/call-metadata.rs index 1b92ff60226aa..20d42ed852dfe 100644 --- a/src/test/codegen/call-metadata.rs +++ b/src/test/codegen/call-metadata.rs @@ -12,6 +12,8 @@ // scalar value. // compile-flags: -C no-prepopulate-passes +// min-llvm-version 4.0 + #![crate_type = "lib"]