On 6/20/19 4:23 PM, Jeff Law wrote:
As outlined in the BZ, our alias analysis code is context insensitive.
So when we copy-propagate pointers, we can can and do copy PTA
information from members to the representative pointer in the copy-of
chain (we do this when the representative pointer has no associated PTA
information).
However, [E]VRP can set the non-nullness of a pointer using context
sensitive information. So we have to be more careful when copying PTA
information.
We already have similar issues with alignment information as well. This
patch just extends the hack to avoid copying alignment information in
some circumstances to also avoid copying the non-nullness property.
Bootstrapped and regression tested on x86_64-linux-gnu. OK for the trunk?
Jeff
Just a question/comment about the test:
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr90949.c
@@ -0,0 +1,33 @@
+void __attribute__((noipa,noinline)) my_puts (const char *str) { }
+void __attribute__((noipa,noinline)) my_free (void *p) { }
+
+
+struct Node
+{
+ struct Node* child;
+};
+
+char *space[sizeof (struct Node) * 2] = { };
+
+void * __attribute__((noipa,noinline)) my_malloc (int bytes) { return
&space;}
Shouldn't space be declared as an array of char rather than char*?
(As it is, strictly speaking, accessing it via an lvalue of type
Node is undefined, even if it's carefully hidden from the compiler
by the attributes.)
Martin