Commit 73984383 by Jeff Law Committed by Jeff Law

re PR tree-optimization/69224 (-Warray-bounds false positive with -O3 and struct pointer parameter)

	PR tree-optimization/69224
	PR tree-optimization/80907
	PR tree-optimization/82286
	* gcc.dg/pr69224.c: New test.
	* gcc.dg/pr80907.c: New test.
	* gcc.dg/pr82286.c: New test.

From-SVN: r255457
parent 91c95da8
2017-12-04 Jeff Law <law@redhat.com>
PR tree-optimization/69224
PR tree-optimization/80907
PR tree-optimization/82286
* gcc.dg/pr69224.c: New test.
* gcc.dg/pr80907.c: New test.
* gcc.dg/pr82286.c: New test.
2017-12-06 Jakub Jelinek <jakub@redhat.com> 2017-12-06 Jakub Jelinek <jakub@redhat.com>
PR c++/80259 PR c++/80259
......
/* { dg-do compile } */
/* { dg-options "-O3 -Warray-bounds" } */
struct S {
int a;
int b;
int c;
int d;
int e;
float x[5];
float y[5]; // Comment these two lines out to
float z[5 - 1]; // remove the warning
};
void f(struct S *s, float a[], float **b, float c[]) {
if ((s->b == 1) && (s->d > 0)) {
for (int i = 0; i < s->a; i++) {
if (a[i] != 0.0) {
for (int j = 0; j < s->d - 1; j++) {
if ((c[i] >= s->x[j]) && (c[i] <= s->x[j + 1])) {
b[2*j][i] = s->x[j];
break;
}
}
}
}
}
}
/* { dg-do compile } */
/* { dg-options "-O3 -Warray-bounds" } */
int x[3];
int n=2;
void foo()
{
for(int i=0;i<n;i++) for(int j=0;j<=i;j++) x[i+j]++;
}
/* { dg-do compile } */
/* { dg-options "-O3 -Warray-bounds" } */
#include <stdio.h>
#include <math.h>
#define MAX_MATRIX_SIZE (10)
typedef struct
{
unsigned int nof_rows;
unsigned int nof_cols;
float data[MAX_MATRIX_SIZE][MAX_MATRIX_SIZE];
} MATRIX_TYPE;
extern void mtrx_decompose_matrix (MATRIX_TYPE * p_input_matrix);
void
mtrx_decompose_matrix (MATRIX_TYPE * p_input_matrix)
{
unsigned int row;
unsigned int col;
unsigned int sub;
float sum;
MATRIX_TYPE tmp;
for (row = 0; row < MAX_MATRIX_SIZE; row++) {
for (col = 0; col < MAX_MATRIX_SIZE; col++) {
tmp.data[row][col] = 0.0;
}
}
tmp.nof_cols = 0;
tmp.nof_rows = 0;
for (row = 0; row < p_input_matrix->nof_rows; row++) {
for (col = row; col < p_input_matrix->nof_cols; col++) {
sum = 0.0f;
for (sub = 0; sub < row; sub++) {
sum += tmp.data[row][sub] * tmp.data[col][sub];
}
sum = p_input_matrix->data[col][row] - sum;
if (row == col) {
if (sum >= 0.0) {
#if ERROR
tmp.data[row][col] = sqrtf (sum);
#else
tmp.data[row][col] = sum;
#endif
}
else {
tmp.data[row][col] = 0.0f;
}
}
else {
tmp.data[col][row] = sum / tmp.data[row][row];
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment