From d5106e0dda5823c21c3b5887c507805b22cc0214 Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Wed, 27 Jan 2016 11:04:56 +0100 Subject: =?UTF-8?q?=09gcc/=20=09Backport=20from=20trunk=20r232668.=20=0920?= =?UTF-8?q?16-01-21=20=20=20Stefan=20S=C3=B8rensen=20=20=20=09=20=20=20=20=20Jakub=20Jelinek=20=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR target/69187 PR target/65624 * config/arm/arm-builtins.c (arm_expand_neon_builtin): Increase args array size by one to avoid buffer overflow. gcc/testsuite/ Backport from trunk r232668. PR target/69187 PR target/65624 * gcc.target/arm/pr69187.c: New test. Change-Id: Iff2377c7356b5167553afda438e1b41e802bddf0 --- gcc/config/arm/arm-builtins.c | 2 +- gcc/testsuite/gcc.target/arm/pr69187.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/arm/pr69187.c (limited to 'gcc') diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c index e961ee8b424..a70cb536792 100644 --- a/gcc/config/arm/arm-builtins.c +++ b/gcc/config/arm/arm-builtins.c @@ -2249,7 +2249,7 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target) neon_builtin_datum *d = &neon_builtin_data[fcode - ARM_BUILTIN_NEON_PATTERN_START]; enum insn_code icode = d->code; - builtin_arg args[SIMD_MAX_BUILTIN_ARGS]; + builtin_arg args[SIMD_MAX_BUILTIN_ARGS + 1]; int num_args = insn_data[d->code].n_operands; int is_void = 0; int k; diff --git a/gcc/testsuite/gcc.target/arm/pr69187.c b/gcc/testsuite/gcc.target/arm/pr69187.c new file mode 100644 index 00000000000..9992a6954b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr69187.c @@ -0,0 +1,19 @@ +/* PR target/69187 */ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon } */ +/* { dg-options "-O0" } */ +/* { dg-add-options arm_neon } */ + +#include + +int32x4_t +foo (void) +{ + int32x4_t vector_int32x4; + int16x4_t vector3_int16x4; + int16x4_t vector4_int16x4; + static int32_t buffer_int32x4[32]; + + vector_int32x4 = vld1q_s32(buffer_int32x4); + return vqdmlsl_lane_s16(vector_int32x4, vector3_int16x4, vector4_int16x4, 0); +} -- cgit v1.2.3