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