And there's patch with Richi's validation check that he provided.
It fails on following 2 tests in test-suite:

$ ./xgcc -B. 
/home/marxin/Programming/gcc/gcc/testsuite/gcc.target/i386/pr68674.c
DECL_MODE BLK vs TYPE_MODE V8SI [V8SI]: a
...

$ ./xgcc -B. 
/home/marxin/Programming/gcc/gcc/testsuite/gcc.target/i386/pr80583.c -c
DECL_MODE BLK vs TYPE_MODE V8SI [V8SI]: a
...

In both cases we access a global variable from a function with a different 
target
attributes. I guess Honza has seen that in inliner.

What to do with these, can it be potentially dangerous?

Thanks,
Martin

>From bf22210f96a2ead9d50e351102f095aadf9d879f Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Wed, 16 Jan 2019 09:05:21 +0100
Subject: [PATCH] Sanitize about VECTOR_TYPEs.

---
 gcc/tree-cfg.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 6041f4208b0..fc1dd36fbb7 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -5108,6 +5108,17 @@ verify_node_sharing_1 (tree *tp, int *walk_subtrees, void *data)
 {
   hash_set<void *> *visited = (hash_set<void *> *) data;
 
+  if (DECL_P (*tp)
+      && VECTOR_TYPE_P (TREE_TYPE (*tp))
+      && DECL_MODE (*tp) != TYPE_MODE (TREE_TYPE (*tp)))
+    {
+      fprintf (stderr, "DECL_MODE %s vs TYPE_MODE %s [%s]: ",
+              mode_name[DECL_MODE (*tp)],
+              mode_name[TYPE_MODE (TREE_TYPE (*tp))],
+              mode_name[TYPE_MODE_RAW (TREE_TYPE (*tp))]);
+      print_generic_expr (stderr, *tp);
+      fprintf (stderr, "\n");
+    }
   if (tree_node_can_be_shared (*tp))
     {
       *walk_subtrees = false;
-- 
2.20.1

Reply via email to