Skip to content

ARM compilers always hit an LLVM assertion (if enabled) during codegen. #32360

Closed
@japaric

Description

@japaric

STR

// minified ansi-term-0.7.2
// src/lib.rs
#![crate_type = "rlib"]

use std::default::Default;

/// A style is a collection of properties that can format a string
/// using ANSI escape codes.
#[derive(PartialEq, Clone, Copy, Debug)]
pub struct Style {
    is_italic: bool,
    is_underline: bool,
    is_blink: bool,
    is_reverse: bool,
    is_hidden: bool
}

impl Style {
    /// Creates a new Style with no differences.
    pub fn new() -> Style {
        Style::default()
    }
}

impl Default for Style {
    fn default() -> Style {
        Style {
            is_italic: false,
            is_underline: false,
            is_blink: false,
            is_reverse: false,
            is_hidden: false
        }
    }
}
$ rustc src/lib.rs
rustc: /buildslave/rust/src/llvm/lib/IR/Attributes.cpp:876: llvm::AttributeSet llvm::AttributeSet::removeAttributes(llvm::LLVMContext&, unsigned int, llvm::AttributeSet) const: Assertion `!Attrs.hasAttribute(Index, Attribute::Alignment) && "Attempt to change alignment!"' failed.

Backtrace

#0  __libc_do_syscall () at ../ports/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:44
#1  0xb6801f0e in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#2  0xb6804766 in __GI_abort () at abort.c:89
#3  0xb67fd150 in __assert_fail_base (fmt=0x1 <error: Cannot access memory at address 0x1>, assertion=0xb461b76c "!Attrs.hasAttribute(Index, Attribute::Alignment) && \"Attempt to change alignment!\"", assertion@entry=0x0, file=0xb461addc "/buildslave/rust/src/llvm/lib/IR/Attributes.cpp",
    file@entry=0xb21ff270 "\001", line=876, line@entry=3062628524,
    function=function@entry=0xb461be10 <llvm::AttributeSet::removeAttributes(llvm::LLVMContext&, unsigned int, llvm::AttributeSet) const::__PRETTY_FUNCTION__> "llvm::AttributeSet llvm::AttributeSet::removeAttributes(llvm::LLVMContext&, unsigned int, llvm::AttributeSet) const") at assert.c:92
#4  0xb67fd1e6 in __GI___assert_fail (assertion=0x0, file=0xb21ff270 "\001", line=3062628524,
    function=0xb461be10 <llvm::AttributeSet::removeAttributes(llvm::LLVMContext&, unsigned int, llvm::AttributeSet) const::__PRETTY_FUNCTION__> "llvm::AttributeSet llvm::AttributeSet::removeAttributes(llvm::LLVMContext&, unsigned int, llvm::AttributeSet) const") at assert.c:101
#5  0xb38b041c in llvm::AttributeSet::removeAttributes(llvm::LLVMContext&, unsigned int, llvm::AttributeSet) const () from /home/japaric/stage2-C/lib/librustc_llvm-9fb2c48c1d571895.so
#6  0xb38dad54 in LLVMRemoveFunctionAttr () from /home/japaric/stage2-C/lib/librustc_llvm-9fb2c48c1d571895.so
#7  0xb5dc1020 in inline (val=<optimized out>, inline={void (union Value_opaque *, enum InlineAttr)} 0xb5dc0fe8 <rustc_trans::trans::attributes::from_fn_attrs+64>) at /buildslave/rust/src/librustc_trans/trans/attributes.rs:32
#8  rustc_trans::trans::attributes::from_fn_attrs (ccx=<optimized out>, attrs=..., llfn=0xadeb4f64) at /buildslave/rust/src/librustc_trans/trans/attributes.rs:88
#9  0xb5e2e650 in rustc_trans::trans::callee::get_fn (ccx=<optimized out>, def_id=..., substs=<optimized out>) at /buildslave/rust/src/librustc_trans/trans/callee.rs:543
#10 0xb5dc3718 in rustc_trans::trans::callee::Callee<'tcx>::def (ccx=0xb21f5090, def_id=..., substs=<optimized out>) at /buildslave/rust/src/librustc_trans/trans/callee.rs:140
#11 0xb5df5f50 in rustc_trans::trans::base::trans_item (ccx=<optimized out>, item=<optimized out>) at /buildslave/rust/src/librustc_trans/trans/base.rs:2302
#12 0xb5e19bf4 in fnfn () at /buildslave/rust/src/librustc_trans/trans/base.rs:2919
#13 with_task<closure,()> (self=0xb21f9e6c, key=..., op=...) at /buildslave/rust/src/librustc/dep_graph/mod.rs:165
#14 rustc_trans::trans::base::TransItemsWithinModVisitor<'a, 'tcx>.Visitor<'v>::visit_item (self=0xb21f5be0, i=0xb189386c) at /buildslave/rust/src/librustc_trans/trans/base.rs:2909
#15 0xb5dfde20 in visit_nested_item (self=0xb21f5be0, item_id=...) at /buildslave/rust/src/librustc_trans/trans/base.rs:2895
#16 walk_mod<rustc_trans::trans::base::TransItemsWithinModVisitor> (visitor=<optimized out>, module=<optimized out>) at /buildslave/rust/src/librustc_front/intravisit.rs:225
#17 rustc_trans::trans::base::trans_crate (tcx=<optimized out>, mir_map=<optimized out>, analysis=<error reading variable: Cannot access memory at address 0x0>) at /buildslave/rust/src/librustc_trans/trans/base.rs:2752
#18 0xb6ea6904 in fnfn () at /buildslave/rust/src/librustc_driver/driver.rs:941
#19 time<rustc_trans::trans::CrateTranslation,closure> (f=..., do_it=<optimized out>, what=...) at /buildslave/rust/src/librustc/util/common.rs:38
#20 rustc_driver::driver::phase_4_translate_to_llvm (tcx=<optimized out>, mir_map=<error reading variable: Cannot access memory at address 0x0>, analysis=...) at /buildslave/rust/src/librustc_driver/driver.rs:939
#21 0xb6ea48f8 in fnfn (tcx=<optimized out>, mir_map=..., analysis=<error reading variable: Cannot access memory at address 0x0>, result=...) at /buildslave/rust/src/librustc_driver/driver.rs:205
#22 0xb6e9e544 in fnfn (tcx=0xb21f9e18) at /buildslave/rust/src/librustc_driver/driver.rs:923
#23 0xb6e98e58 in with<closure,core::result::Result<core::result::Result<(rustc::session::config::OutputFilenames, rustc_trans::trans::CrateTranslation), usize>, usize>> (self=<optimized out>, f=...) at /buildslave/rust/src/libstd/thread/local.rs:211
#24 with<closure,core::result::Result<core::result::Result<(rustc::session::config::OutputFilenames, rustc_trans::trans::CrateTranslation), usize>, usize>> (self=<optimized out>, f=...) at /buildslave/rust/src/libstd/thread/local.rs:211
#25 enter<closure,core::result::Result<core::result::Result<(rustc::session::config::OutputFilenames, rustc_trans::trans::CrateTranslation), usize>, usize>> (tcx=..., f=...) at /buildslave/rust/src/librustc/middle/ty/context.rs:642
#26 rustc_driver::middle::ty::context::TyCtxt<'tcx>::create_and_enter<closure,core::result::Result<core::result::Result<(rustc::session::config::OutputFilenames, rustc_trans::trans::CrateTranslation), usize>, usize>> (s=<optimized out>, arenas=<optimized out>,
    def_map=<error reading variable: Cannot access memory at address 0x0>, named_region_map=<error reading variable: Cannot access memory at address 0x0>, map=..., freevars=<error reading variable: Cannot access memory at address 0x0>, region_maps=<error reading variable: Cannot access memory at address 0x0>,
    lang_items=..., stability=<error reading variable: Cannot access memory at address 0x0>, f=...) at /buildslave/rust/src/librustc/middle/ty/context.rs:521
#27 0xb6e94b1c in rustc_driver::driver::phase_3_run_analysis_passes<closure,core::result::Result<(rustc::session::config::OutputFilenames, rustc_trans::trans::CrateTranslation), usize>> (sess=<optimized out>, cstore=<optimized out>, hir_map=..., arenas=<optimized out>, name=..., make_glob_map=<optimized out>, f=...)
    at /buildslave/rust/src/librustc_driver/driver.rs:811
#28 0xb6e69e60 in rustc_driver::driver::compile_input (sess=0xb21fd0b8, cstore=<optimized out>, cfg=..., input=<optimized out>, outdir=<optimized out>, output=<optimized out>, addl_plugins=..., control=<optimized out>) at /buildslave/rust/src/librustc_driver/driver.rs:171
#29 0xb6e58360 in rustc_driver::run_compiler (args=..., callbacks=...) at /buildslave/rust/src/librustc_driver/lib.rs:207
#30 0xb6e55b48 in fnfn () at /buildslave/rust/src/librustc_driver/lib.rs:130
#31 fnfn () at /buildslave/rust/src/librustc_driver/lib.rs:1038
#32 rustc_driver::sys_common::unwind::try::try_fn<closure> (opt_closure=<optimized out>) at /buildslave/rust/src/libstd/sys/common/unwind/mod.rs:127
#33 0xb69a92a0 in __rust_try () from /home/japaric/stage2-C/lib/libstd-6183d680ed4f21d9.so
#34 0xb69a9224 in fnfn (s=<optimized out>) at /buildslave/rust/src/libstd/sys/common/unwind/mod.rs:148
#35 with<closure,core::result::Result<(), Box<Any>>> (self=<optimized out>, f=...) at /buildslave/rust/src/libstd/thread/local.rs:211
#36 std::sys_common::unwind::inner_try (f=0xb6e55a1c <rustc_driver::sys_common::unwind::try::try_fn<closure>>, data=0xb21febe8 "") at /buildslave/rust/src/libstd/sys/common/unwind/mod.rs:133
#37 0xb6e56330 in try<closure> (f=...) at /buildslave/rust/src/libstd/sys/common/unwind/mod.rs:123
#38 rustc_driver::boxed::F.FnBox<A>::call_box (self=0xb2211c90, args=<optimized out>) at /buildslave/rust/src/liballoc/boxed.rs:541
#39 0xb69b65ac in call_once (self=..., args=<optimized out>) at /buildslave/rust/src/liballoc/boxed.rs:550
#40 start_thread (main=0xb227a020) at /buildslave/rust/src/libstd/sys/common/thread.rs:23
#41 std::sys::thread::Thread::new::thread_start (main=0xb227a020) at /buildslave/rust/src/libstd/sys/unix/thread.rs:74
#42 0xb28d2fbc in start_thread (arg=0xb21ff270) at pthread_create.c:314
#43 0xb686f97c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:92 from /lib/arm-linux-gnueabihf/libc.so.6

Removing any line that's not just whitespace from src/lib.rs makes the LLVM assertion disappear.

Meta

$ rustc -Vv
rustc 1.9.0-nightly (151be0933 2016-03-19)
binary: rustc
commit-hash: 151be09333b53a761c847107bc659769632ae6c6
commit-date: 2016-03-19
host: armv7-unknown-linux-gnueabihf
release: 1.9.0-nightly

Compiler produced with:

$ configure --enable-llvm-static-stdcpp --enable-rustbuild --release-channel=nightly --enable-debug --enable-optimize --host=armv7-unknown-linux-gnueabihf

A compiler built without optimizations (see configure arguments below) never hits the LLVM assertion.

$ configure --enable-llvm-static-stdcpp --enable-rustbuild --release-channel=nightly --enable-debug --host=armv7-unknown-linux-gnueabihf

A compiler built with optimizations and without debug information (see configure arguments below) also hits the LLVM assertion.

configure --enable-llvm-static-stdcpp --enable-rustbuild --release-channel=nightly --host=armv7-unknown-linux-gnueabihf

This is a rather old regression that I tried to bisect long time ago, and if my memory serves me right I tracked it down to #23011.

cc @alexcrichton

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions