diff mbox

Limit vector alignments (PR 69973)

Message ID 56DA207B.9000508@redhat.com
State New
Headers show

Commit Message

Bernd Schmidt March 4, 2016, 11:55 p.m. UTC
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

Comments

Jeff Law March 5, 2016, 5:35 a.m. UTC | #1
On 03/04/2016 04:55 PM, Bernd Schmidt wrote:
> 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
>
> valign.diff
>
>
> 	PR c/69973
> 	* targhooks.c (default_vector_alignment): Limit to MAX_OFILE_ALIGNMENT.
>
> testsuite/
> 	PR c/69973
> 	* gcc.dg/pr69973.c: New test.
This is safe enough that even though it's not a regression I think it's 
fine for gcc-6.

I'll commit to the trunk momentarily.

jeff
diff mbox

Patch

	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)));