kosarev added a comment. Now that https://reviews.llvm.org/D38796 is comitted and added the tbaa-cast.cpp test case to the mainline, we fail on it with this patch applied. The reason is that we have no special TBAA type node for may-alias accesses, so everything that ever been a potential access to a character type turns into a may-alias access and propagates as such.
The test case reads: struct V { unsigned n; }; struct S { char bytes[4]; }; void foo(S *p) { ((V*)p->bytes)->n = 5; } Here, p->bytes decays to a pointer to char, meaning the pointee object is considered may-alias and so it is after the explicit cast. This arises an interesting question: should we introduce a special representation for may-alias accesses to distinct them from character-typed accesses? Or, maybe explicit casts should not derive their may-alias'ness from their source operands? Or, maybe we want to consider all explicit casts of the form ##(T*)E## where ##T*## and ##typeof(E)## point to different types as pointers to may-alias objects? Repository: rL LLVM https://reviews.llvm.org/D39008 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits