Runtime for ARM
Kai Nacke
kai at redstar.de
Tue May 14 20:30:11 PDT 2013
On Saturday, 16 February 2013 at 23:45:55 UTC, Paolo Invernizzi
wrote:
> Right now I've reduced the ice to something like:
>
> template Rebindable(T) {
> struct Rebindable {
> void opAssign(Rebindable ) {}
> }
> }
> struct SysTime {
> Rebindable!(TimeZone) _timezone;
> }
> class TimeZone {}
>
> ice with ldc2 -c ice.d -march=arm -mcpu=cortex-a9
> -mtriple=arm-linux-gnueabihf
Hi Paolo!
It is a LLVM bug. I used bugpoint and a bit of editing to derive
this IR file:
; ModuleID = 'bugpoint-reduced-simplified.bc'
target datalayout =
"e-p:32:32:32-S64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:64:128-a0:0:64-n32"
target triple = "arm--linux-gnueabihf"
%"armbug.Rebindable!(TimeZone).Rebindable" = type <{ i8 }>
%armbug.SysTime = type <{
%"armbug.Rebindable!(TimeZone).Rebindable" }>
%armbug.TimeZone = type { i8* }
declare fastcc void
@opAssign(%"armbug.Rebindable!(TimeZone).Rebindable"*,
%"armbug.Rebindable!(TimeZone).Rebindable"* byval)
define fastcc %armbug.SysTime* @doOpAssign(%armbug.SysTime*
%.this_arg, %armbug.SysTime* byval %p_arg) {
entry:
br i1 undef, label %noassert, label %assert
assert: ; preds = %entry
unreachable
noassert: ; preds = %entry
call fastcc void
@opAssign(%"armbug.Rebindable!(TimeZone).Rebindable"* undef,
%"armbug.Rebindable!(TimeZone).Rebindable"* byval undef)
ret %armbug.SysTime* %.this_arg
}
You get the assertion failure if you use llc to compile this
file. This does not happen on X86_64 - it is a bug!
Please, could you file a bug report for LLVM:
http://llvm.org/bugs/
BTW: This is quite natural. LDC uses LLVM in some other way then
clang. This may raise otherwise unnoticed bugs. For PPC64, I
currently work on the 3rd LLVM bug...
Regards
Kai
More information about the digitalmars-d-ldc
mailing list