[llvm-dev] Error just after program execution

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[llvm-dev] Error just after program execution

Hal Finkel via llvm-dev

Hi,


I keep getting the following error after I have generated llvm IR ( using a Module->print(errs(),nullptr) ) -

"pure virtual method called terminate called without an active exception."



On the last line of the program , after everything has been executed , I get this error. 
Can anyone explain this ?


Following is my LLVM IR - ( Kindly do not pay attention to semantics as it is for a personal project)
When compiled using llvm-as and then lli  , it works as expected.



; ModuleID = 'myTest'
source_filename = "myTest"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"

@str = private unnamed_addr constant [14 x i8] c"value = %+d,\0A\00"

define i32 @UInt(i2 %x) {
entry:
  %x1 = alloca i2
  store i2 %x, i2* %x1
  ret i32 2
}

define i8 @test2() {
entry:
  %datasize = alloca i32
  store i32 0, i32* %datasize
  %x = alloca i2
  store i2 -2, i2* %x
  %x1 = load i2, i2* %x
  %calltmp = call i32 @UInt(i2 %x1)
  switch i32 %calltmp, label %sw.bb.0 [
    i32 1, label %sw.bb.1
    i32 2, label %sw.bb.2
    i32 3, label %sw.bb.3
  ]

sw.bb.0:                                          ; preds = %entry
  %resclone0 = alloca i10
  store i10 -113, i10* %resclone0
  ret i8 0

sw.bb.1:                                          ; preds = %entry
  %resclone2 = alloca i20
  store i20 -113, i20* %resclone2
  ret i8 0

sw.bb.2:                                          ; preds = %entry
  %resclone4 = alloca i30
  store i30 -113, i30* %resclone4
  ret i8 34

sw.bb.3:                                          ; preds = %entry
  %resclone6 = alloca i40
  store i40 -113, i40* %resclone6
  ret i8 0
}

define i32 @main() {
entry:
  %calltmp = call i8 @test2()
  %x = alloca i8
  store i8 %calltmp, i8* %x
  %x1 = load i8, i8* %x
  %calltmp2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @str, i32 0, i32 0), i8 %x1)
  ret i32 0
}

declare i32 @printf(i8*, ...)



_______________________________________________
LLVM Developers mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Loading...