[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

[llvm-dev] Error just after program execution

Alex Bradbury via llvm-dev


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) {
  %x1 = alloca i2
  store i2 %x, i2* %x1
  ret i32 2

define i8 @test2() {
  %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() {
  %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]