This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Limit vector alignments (PR 69973)
- From: Bernd Schmidt <bschmidt at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Sat, 5 Mar 2016 00:55:39 +0100
- Subject: Limit vector alignments (PR 69973)
- Authentication-results: sourceware.org; auth=none
- References: <56DA1DEB dot 2010701 at t-online dot de>
This is a problem I ran into before, although I can't remember the
details. The problem here is that a user program requests an
unreasonably large vector, the default_vector_alignment returns an
unreasonably large alignment in a HOST_WIDE_INT, which then gets stored
int TYPE_ALIGN, which is an int. Therefore TYPE_ALIGN becomes zero,
smaller than the type size, and we abort.
It seems misguided not to restrict alignments much more drastically in
this hook, but for now I chose what I think is a conservative fix:
limiting alignments to MAX_OFILE_ALIGNMENT.
Bootstrapped and tested on x86_64-linux. Ok?
Bernd
PR c/69973
* targhooks.c (default_vector_alignment): Limit to MAX_OFILE_ALIGNMENT.
testsuite/
PR c/69973
* gcc.dg/pr69973.c: New test.
Index: gcc/targhooks.c
===================================================================
--- gcc/targhooks.c (revision 233451)
+++ gcc/targhooks.c (working copy)
@@ -1031,7 +1031,10 @@ tree default_mangle_decl_assembler_name
HOST_WIDE_INT
default_vector_alignment (const_tree type)
{
- return tree_to_shwi (TYPE_SIZE (type));
+ HOST_WIDE_INT align = tree_to_shwi (TYPE_SIZE (type));
+ if (align > MAX_OFILE_ALIGNMENT)
+ align = MAX_OFILE_ALIGNMENT;
+ return align;
}
bool
Index: gcc/testsuite/gcc.dg/pr69973.c
===================================================================
--- gcc/testsuite/gcc.dg/pr69973.c (revision 0)
+++ gcc/testsuite/gcc.dg/pr69973.c (working copy)
@@ -0,0 +1,2 @@
+/* { dg-do compile } */
+typedef int v4si __attribute__ ((vector_size (1 << 29)));