Hey again)<br><br>Now I have next code:<br><br>; ModuleID = 'sample.lz'<br>@.str1 = internal global [8 x i8] c" world!\00" ; <[8 x i8]*> [#uses=1]<br>@.str2 = internal global [8 x i8] c"hello, \00" ; <[8 x i8]*> [#uses=1]
<br>@.str7 = internal global [21 x i8] c"welcome to out hall!\00" ; <[21 x i8]*> [#uses=1]<br><br>declare i32 @puts(i8*)<br><br>declare i8* @strcat(i8*, i8*)<br><br>declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)
<br><br>define i32 @main() {<br>mainBlock:<br> %.str3 = getelementptr [8 x i8]* @.str2, i64 0, i64 0 ; <i8*> [#uses=1]<br> %.str4 = getelementptr [8 x i8]* @.str1, i64 0, i64 0 ; <i8*> [#uses=1]
<br> %tmp5 = call i8* @strcat( i8* %.str3, i8* %.str4 ) ; <i8*> [#uses=1]<br> %tmp6 = call i32 @puts( i8* %tmp5 ) ; <i32> [#uses=0]<br> %.str8 = getelementptr [21 x i8]* @.str7, i64 0, i64 0 ; <i8*> [#uses=1]
<br> %tmp9 = call i32 @puts( i8* %.str8 ) ; <i32> [#uses=0]<br> ret i32 0<br>}<br><br>After compilation I see next(without %):<br><br>%<br>hello, world!<br>world!<br><br>what is the trouble now?
<br>but next code runs ok:<br>; ModuleID = 'sample.lz'<br>@.str1 = internal global [7 x i8] c"father\00" ; <[7 x i8]*> [#uses=1]<br>@.str2 = internal global [8 x i8] c"mother \00" ; <[8 x i8]*> [#uses=1]
<br><br>declare i32 @puts(i8*)<br><br>declare i8* @strcat(i8*, i8*)<br><br>declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)<br><br>define i32 @main() {<br>mainBlock:<br> %.str3 = getelementptr [8 x i8]* @.str2, i64 0, i64 0 ; <i8*> [#uses=1]
<br> %.str4 = getelementptr [7 x i8]* @.str1, i64 0, i64 0 ; <i8*> [#uses=1]<br> %tmp5 = call i8* @strcat( i8* %.str3, i8* %.str4 ) ; <i8*> [#uses=1]<br> %tmp6 = call i32 @puts( i8* %tmp5 ) ; <i32> [#uses=0]
<br> ret i32 0<br>}<br><br>After running:<br>%<br>mother father<br><br>It's ok, but in prev. example (when I call strcat more than one times) program works incorrectly<br>help me please...<br><br>Best regards,<br>
Zalunin Pavel<br>