<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p>Hi,</p>
<p><br>
</p>
<p>I keep getting the following error <b>after </b>I have generated llvm IR ( using a Module->print(errs(),nullptr) ) -<br>
<br>
<b>"<span>pure virtual method called terminate called without an active exception."</span></b></p>
<p><br>
</p>
<p><br>
</p>
<p>On the last line of the program , after everything has been executed , I get this error. <br>
Can anyone explain this ?</p>
<p><br>
</p>
<p>Following is my LLVM IR - ( Kindly do not pay attention to semantics as it is for a personal project)<br>
When compiled using llvm-as and then lli  , it works as expected.<br>
<br>
<br>
<br>
</p>
<div>; ModuleID = 'myTest'</div>
<div>source_filename = "<span style="font-family:Calibri,Arial,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:16px">myTest</span>"</div>
<div>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"</div>
<div><br>
</div>
<div>@str = private unnamed_addr constant [14 x i8] c"value = %+d,\0A\00"</div>
<div><br>
</div>
<div>define i32 @UInt(i2 %x) {</div>
<div>entry:</div>
<div>  %x1 = alloca i2</div>
<div>  store i2 %x, i2* %x1</div>
<div>  ret i32 2</div>
<div>}</div>
<div><br>
</div>
<div>define i8 @test2() {</div>
<div>entry:</div>
<div>  %datasize = alloca i32</div>
<div>  store i32 0, i32* %datasize</div>
<div>  %x = alloca i2</div>
<div>  store i2 -2, i2* %x</div>
<div>  %x1 = load i2, i2* %x</div>
<div>  %calltmp = call i32 @UInt(i2 %x1)</div>
<div>  switch i32 %calltmp, label %sw.bb.0 [</div>
<div>    i32 1, label %sw.bb.1</div>
<div>    i32 2, label %sw.bb.2</div>
<div>    i32 3, label %sw.bb.3</div>
<div>  ]</div>
<div><br>
</div>
<div>sw.bb.0:                                          ; preds = %entry</div>
<div>  %resclone0 = alloca i10</div>
<div>  store i10 -113, i10* %resclone0</div>
<div>  ret i8 0</div>
<div><br>
</div>
<div>sw.bb.1:                                          ; preds = %entry</div>
<div>  %resclone2 = alloca i20</div>
<div>  store i20 -113, i20* %resclone2</div>
<div>  ret i8 0</div>
<div><br>
</div>
<div>sw.bb.2:                                          ; preds = %entry</div>
<div>  %resclone4 = alloca i30</div>
<div>  store i30 -113, i30* %resclone4</div>
<div>  ret i8 34</div>
<div><br>
</div>
<div>sw.bb.3:                                          ; preds = %entry</div>
<div>  %resclone6 = alloca i40</div>
<div>  store i40 -113, i40* %resclone6</div>
<div>  ret i8 0</div>
<div>}</div>
<div><br>
</div>
<div>define i32 @main() {</div>
<div>entry:</div>
<div>  %calltmp = call i8 @test2()</div>
<div>  %x = alloca i8</div>
<div>  store i8 %calltmp, i8* %x</div>
<div>  %x1 = load i8, i8* %x</div>
<div>  %calltmp2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @str, i32 0, i32 0), i8 %x1)</div>
<div>  ret i32 0</div>
<div>}</div>
<div><br>
</div>
<div>declare i32 @printf(i8*, ...)</div>
<div><br>
</div>
<br>
<p></p>
</div>
</body>
</html>