On 28 March 2017 at 12:42, Dibyendu Majumdar <mobile@xxxxxxxxxxxxxxx> wrote: > I have this test: > > extern int printf(const char *, ...); > > int main(void) > { > int x = 6; > const char txt[] = "local string %d %f %f\n"; > float g = 4.2; > double e = 42.34; > > printf(txt, x, g, e); > > return 0; > } > > When I generate the linearized output with simplifications disabled, I get: > > C:\d\github\dmr_c\tests\bugs>..\..\build\Debug\linearize.exe init1.c > main: > .L0: > <entry-point> > store.32 $6 -> 0[x] > load.184* %r1 <- 0["local string %d %f %f\n"] > store.184* %r1 -> 0[txt] > set.f32 %r2 <- 4.200000 > store.f32 %r2 -> 0[g] > set.f64 %r3 <- 42.340000 > store.f64 %r3 -> 0[e] > symaddr.64* %r4 <- txt > set.f64 %r5 <- 4.200000 > set.f64 %r6 <- 42.340000 > push.64* %r4 > push.32 $6 > push.f64 %r5 > push.f64 %r6 > call.32 %r7 <- printf > phisrc.32 %phi1(return) <- $0 > br .L1 > > .L1: > phi.32 %r8 <- %phi1(return) > ret.32 $0 > > What is interesting is that the load and store ops have a size that is > 184 bits. This scenario is not handled by sparse-llvm correctly. > > Presumably for the store here we need to copy the data? What about the load? > So it seems that when dealing with store we need to check if the target type is an aggregate type - array, or struct - because stores to these types are not yet implemented in sparse-llvm. I am not sure whether load needs a check too. Regards Dibyendu -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html