public inbox for gcc-regression@sourceware.org
help / color / mirror / Atom feed
* [r13-1405 Regression] FAIL: gcc.dg/analyzer/allocation-size-4.c warning at line 31 (test for warnings, line 28) on Linux/x86_64
@ 2022-07-02 21:10 skpandey
2022-07-02 23:20 ` [PATCH] analyzer: Use fixed-width types in allocation size tests Tim Lange
0 siblings, 1 reply; 4+ messages in thread
From: skpandey @ 2022-07-02 21:10 UTC (permalink / raw)
To: gcc-patches, gcc-regression, mail
On Linux/x86_64,
e6c3bb379f515b27268d08e62b4b3e5d7200b437 is the first bad commit
commit e6c3bb379f515b27268d08e62b4b3e5d7200b437
Author: Tim Lange <mail@tim-lange.me>
Date: Fri Jul 1 00:02:17 2022 +0200
analyzer: add allocation size checker [PR105900]
caused
FAIL: gcc.dg/analyzer/allocation-size-4.c note at line 32 (test for warnings, line 28)
FAIL: gcc.dg/analyzer/allocation-size-4.c note at line 33 (test for warnings, line 28)
FAIL: gcc.dg/analyzer/allocation-size-4.c warning at line 31 (test for warnings, line 28)
with GCC configured with
../../gcc/configure --prefix=/local/skpandey/gccwork/toolwork/gcc-bisect-master/master/r13-1405/usr --enable-clocale=gnu --with-system-zlib --with-demangler-in-ld --with-fpmath=sse --enable-languages=c,c++,fortran --enable-cet --without-isl --enable-libmpx x86_64-linux --disable-bootstrap
To reproduce:
$ cd {build_dir}/gcc && make check RUNTESTFLAGS="analyzer.exp=gcc.dg/analyzer/allocation-size-4.c --target_board='unix{-m32}'"
$ cd {build_dir}/gcc && make check RUNTESTFLAGS="analyzer.exp=gcc.dg/analyzer/allocation-size-4.c --target_board='unix{-m32\ -march=cascadelake}'"
(Please do not reply to this email, for question about this report, contact me at skpgkp2 at gmail dot com)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] analyzer: Use fixed-width types in allocation size tests
2022-07-02 21:10 [r13-1405 Regression] FAIL: gcc.dg/analyzer/allocation-size-4.c warning at line 31 (test for warnings, line 28) on Linux/x86_64 skpandey
@ 2022-07-02 23:20 ` Tim Lange
2022-07-02 23:38 ` David Malcolm
0 siblings, 1 reply; 4+ messages in thread
From: Tim Lange @ 2022-07-02 23:20 UTC (permalink / raw)
To: skpgkp2; +Cc: gcc-patches, gcc-regression, Tim Lange
Hi,
thanks for the mail! Embarrassingly, I did not account for the different
sizes types may have on different systems. I've switched all testcases
to the fixed-width types of stdint.h.
Does this patch need an approval?
- Tim
The patch changes the types inside the tests for the allocation size
checker to fixed-width types of stdint.h to account for different
architectures with different type widths.
2022-07-03 Tim Lange <mail@tim-lange.me>
gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/allocation-size-1.c: Use fixed-length types.
* gcc.dg/analyzer/allocation-size-2.c: Likewise.
* gcc.dg/analyzer/allocation-size-3.c: Likewise.
* gcc.dg/analyzer/allocation-size-4.c: Likewise.
* gcc.dg/analyzer/allocation-size-5.c: Likewise.
---
.../gcc.dg/analyzer/allocation-size-1.c | 53 +++++++-------
.../gcc.dg/analyzer/allocation-size-2.c | 73 ++++++++++---------
.../gcc.dg/analyzer/allocation-size-3.c | 19 ++---
.../gcc.dg/analyzer/allocation-size-4.c | 13 ++--
.../gcc.dg/analyzer/allocation-size-5.c | 23 +++---
5 files changed, 93 insertions(+), 88 deletions(-)
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
index 4fc2bf75d6c..e6d021a128f 100644
--- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
@@ -1,79 +1,80 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stdint.h>
/* Tests with constant buffer sizes. */
void test_1 (void)
{
- short *ptr = malloc (21 * sizeof (short));
+ int16_t *ptr = malloc (21 * sizeof (int16_t));
free (ptr);
}
void test_2 (void)
{
- int *ptr = malloc (21 * sizeof (short)); /* { dg-line malloc2 } */
+ int32_t *ptr = malloc (21 * sizeof (int16_t)); /* { dg-line malloc2 } */
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
/* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
}
void test_3 (void)
{
- void *ptr = malloc (21 * sizeof (short));
- short *sptr = (short *)ptr;
+ void *ptr = malloc (21 * sizeof (int16_t));
+ int16_t *sptr = (int16_t *)ptr;
free (sptr);
}
void test_4 (void)
{
- void *ptr = malloc (21 * sizeof (short)); /* { dg-message "\\d+ bytes" } */
- int *iptr = (int *)ptr; /* { dg-line assign4 } */
+ void *ptr = malloc (21 * sizeof (int16_t)); /* { dg-message "\\d+ bytes" } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign4 } */
free (iptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign4 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign4 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign4 } */
}
void test_5 (void)
{
- int user_input;
+ int32_t user_input;
scanf("%i", &user_input);
- int n;
+ int32_t n;
if (user_input == 0)
- n = 21 * sizeof (short);
+ n = 21 * sizeof (int16_t);
else
- n = 42 * sizeof (short);
+ n = 42 * sizeof (int16_t);
void *ptr = malloc (n);
- short *sptr = (short *)ptr;
+ int16_t *sptr = (int16_t *)ptr;
free (sptr);
}
void test_6 (void)
{
- int user_input;
+ int32_t user_input;
scanf("%i", &user_input);
- int n;
+ int32_t n;
if (user_input == 0)
- n = 21 * sizeof (short);
+ n = 21 * sizeof (int16_t);
else
- n = 42 * sizeof (short);
+ n = 42 * sizeof (int16_t);
void *ptr = malloc (n); /* { dg-message "" "note" } */
/* ^^^ on widening_svalues no expr is returned
by get_representative_tree at the moment. */
- int *iptr = (int *)ptr; /* { dg-line assign6 } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign6 } */
free (iptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign6 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign6 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign6 } */
}
void test_7 (void)
{
- int user_input;
+ int32_t user_input;
scanf("%i", &user_input);
- int n;
+ int32_t n;
if (user_input == 0)
n = 1;
else if (user_input == 2)
@@ -82,18 +83,18 @@ void test_7 (void)
n = 7;
/* n is an unknown_svalue at this point. */
void *ptr = malloc (n);
- int *iptr = (int *)ptr;
+ int32_t *iptr = (int32_t *)ptr;
free (iptr);
}
-void *create_buffer (int n)
+void *create_buffer (int32_t n)
{
return malloc(n);
}
void test_8 (void)
{
- int *buf = create_buffer(4 * sizeof (int));
+ int32_t *buf = create_buffer(4 * sizeof (int));
free (buf);
}
@@ -105,11 +106,11 @@ void test_9 (void)
impl_region_model_context::warn. To ensure that the indentation
in the diagnostic is right, the warning has to be emitted on an EN
that is after the return edge. */
- int *buf = create_buffer(42); /* { dg-warning "" "" { xfail *-*-* } } */
+ int32_t *buf = create_buffer(42); /* { dg-warning "" "" { xfail *-*-* } } */
free (buf);
}
-void test_10 (int n)
+void test_10 (int32_t n)
{
char *ptr = malloc (7 * n);
free (ptr);
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
index 37bbbac87c5..69ca07561a6 100644
--- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
@@ -1,60 +1,61 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stdint.h>
/* Tests with symbolic buffer sizes. */
-void test_1 (int n)
+void test_1 (int32_t n)
{
- short *ptr = malloc (n * sizeof (short));
+ int16_t *ptr = malloc (n * sizeof (int16_t));
free (ptr);
}
-void test_2 (int n)
+void test_2 (int32_t n)
{
- int *ptr = malloc (n * sizeof (short)); /* { dg-line malloc2 } */
+ int32_t *ptr = malloc (n * sizeof (int16_t)); /* { dg-line malloc2 } */
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
/* { dg-message "'\[a-z0-9\\*\\(\\)\\s\]*' bytes" "note" { target *-*-* } malloc2 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
}
-void test_3 (int n)
+void test_3 (int32_t n)
{
- void *ptr = malloc (n * sizeof (short));
- short *sptr = (short *)ptr;
+ void *ptr = malloc (n * sizeof (int16_t));
+ int16_t *sptr = (int16_t *)ptr;
free (sptr);
}
-void test_4 (int n)
+void test_4 (int32_t n)
{
- void *ptr = malloc (n * sizeof (short)); /* { dg-message "'\[a-z0-9\\*\\(\\)\\s\]*'" "note" } */
- int *iptr = (int *)ptr; /* { dg-line assign4 } */
+ void *ptr = malloc (n * sizeof (int16_t)); /* { dg-message "'\[a-z0-9\\*\\(\\)\\s\]*'" "note" } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign4 } */
free (iptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign4 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign4 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign4 } */
}
void test_5 (void)
{
- int user_input;
+ int32_t user_input;
scanf("%i", &user_input);
- int n;
+ int32_t n;
if (user_input == 0)
- n = 3 * user_input * sizeof (short);
+ n = 3 * user_input * sizeof (int16_t);
else
- n = 5 * user_input * sizeof (short);
+ n = 5 * user_input * sizeof (int16_t);
void *ptr = malloc (n);
- short *sptr = (short *)ptr;
+ int16_t *sptr = (int16_t *)ptr;
free (sptr);
}
void test_6 (void)
{
- int user_input;
+ int32_t user_input;
scanf("%i", &user_input);
- int n;
+ int32_t n;
if (user_input == 0)
n = user_input;
else if (user_input == 2)
@@ -63,22 +64,22 @@ void test_6 (void)
n = user_input * 5;
/* n is an unknown_svalue at this point. */
void *ptr = malloc (n);
- int *iptr = (int *)ptr;
+ int32_t *iptr = (int32_t *)ptr;
free (iptr);
}
-void *create_buffer(int n)
+void *create_buffer(int32_t n)
{
return malloc(n);
}
-void test_7(int n)
+void test_7(int32_t n)
{
- int *buf = create_buffer(n * sizeof (int));
+ int32_t *buf = create_buffer(n * sizeof (int32_t));
free (buf);
}
-void test_8(int n)
+void test_8(int32_t n)
{
/* FIXME: At the moment, region_model::set_value (lhs, <return_value>)
is called at the src_node of the return edge. This edge has no stmts
@@ -86,33 +87,33 @@ void test_8(int n)
impl_region_model_context::warn. To ensure that the indentation
in the diagnostic is right, the warning has to be emitted on an EN
that is after the return edge. */
- int *buf = create_buffer(n * sizeof(short)); /* { dg-warning "" "" { xfail *-*-* } } */
+ int32_t *buf = create_buffer(n * sizeof(int16_t)); /* { dg-warning "" "" { xfail *-*-* } } */
free (buf);
}
void test_9 (void)
{
- int n;
+ int32_t n;
scanf("%i", &n);
/* n is a conjured_svalue. */
void *ptr = malloc (n); /* { dg-message "'n' bytes" "note" } */
- int *iptr = (int *)ptr; /* { dg-line assign9 } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign9 } */
free (iptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign9 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign9 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign9 } */
}
void test_11 (void)
{
- int n;
+ int32_t n;
scanf("%i", &n);
void *ptr = malloc (n);
- if (n == sizeof (int))
+ if (n == sizeof (int32_t))
{
/* n is a conjured_svalue but guarded such that we
know the value is a multiple of sizeof (*iptr). */
- int *iptr = (int *)ptr;
+ int32_t *iptr = (int32_t *)ptr;
free (iptr);
}
else
@@ -121,25 +122,25 @@ void test_11 (void)
void test_12 (void)
{
- int n;
+ int32_t n;
scanf("%i", &n);
void *ptr = malloc (n); /* { dg-message "'n' bytes" } */
if (n == 5)
{
/* n is a conjured_svalue but guarded such that we
know the value isn't a multiple of sizeof (*iptr). */
- int *iptr = (int *)ptr; /* { dg-line assign12 } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign12 } */
free (iptr);
}
else
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign12 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign12 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign12 } */
}
void test_13 (void)
{
- int n;
+ int32_t n;
scanf("%i", &n);
void *ptr = malloc (n);
if (n == n * n)
@@ -147,7 +148,7 @@ void test_13 (void)
/* n is a conjured_svalue but guarded such that we don't have an
equivalence class for it. In such cases, we assume that the
condition ensures that the value is okay. */
- int *iptr = (int *)ptr;
+ int32_t *iptr = (int32_t *)ptr;
free (iptr);
}
else
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
index fdc1c56b7ee..eb63fa75578 100644
--- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
@@ -1,10 +1,11 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stdint.h>
/* CWE-131 example 5 */
void test_1 (void)
{
- int *id_sequence = (int *) malloc (3); /* { dg-line malloc1 } */
+ int32_t *id_sequence = (int32_t *) malloc (3); /* { dg-line malloc1 } */
if (id_sequence == NULL) exit (1);
id_sequence[0] = 13579;
@@ -15,31 +16,31 @@ void test_1 (void)
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc1 } */
/* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc1 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } malloc1 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } malloc1 } */
}
void test_2 (void)
{
- int *ptr = malloc (10 + sizeof(int)); /* { dg-line malloc2 } */
+ int32_t *ptr = malloc (10 + sizeof(int32_t)); /* { dg-line malloc2 } */
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
/* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
}
-void test_3 (int n)
+void test_3 (int32_t n)
{
- int *ptr = malloc (n + sizeof (int)); /* { dg-line malloc3 } */
+ int32_t *ptr = malloc (n + sizeof (int32_t)); /* { dg-line malloc3 } */
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc3 } */
/* { dg-message "'\[a-z0-9\\+\\(\\)\\s\]*' bytes" "note" { target *-*-* } malloc3 } */
- /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } malloc3 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } malloc3 } */
}
-void test_4 (int n, int m)
+void test_4 (int32_t n, int32_t m)
{
- int *ptr = malloc ((n + m) * sizeof (int));
+ int32_t *ptr = malloc ((n + m) * sizeof (int32_t));
free (ptr);
}
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
index e475c1586a3..73cbcc5e509 100644
--- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
@@ -1,18 +1,19 @@
#include <stdlib.h>
+#include <stdint.h>
/* Tests related to structs. */
struct base {
- int i;
+ int16_t i;
};
struct sub {
struct base b;
- int j;
+ int16_t j;
};
struct var_len {
- int i;
+ int16_t i;
char arr[];
};
@@ -25,12 +26,12 @@ void test_1 (void)
void test_2 (void)
{
- long *ptr = malloc (5 * sizeof (struct base)); /* { dg-line malloc2 } */
+ int32_t *ptr = malloc (5 * sizeof (struct base)); /* { dg-line malloc2 } */
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
/* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
- /* { dg-message "'long (int)? \\*' here; 'sizeof \\(long (int)?\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
}
void test_3 (void)
@@ -51,7 +52,7 @@ void test_5 (void)
{
/* For constant sizes, we warn if the buffer
is too small to hold a single struct. */
- struct base *ptr = malloc (2); /* { dg-line malloc5 } */
+ struct base *ptr = malloc (1); /* { dg-line malloc5 } */
free (ptr);
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc5 } */
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
index ae7e1074ebb..7769beec274 100644
--- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
@@ -1,36 +1,37 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stdint.h>
/* Tests related to statically allocated buffers. */
typedef struct a {
- short s;
+ int16_t s;
} a;
-int *test_1 (void)
+int32_t *test_1 (void)
{
a A; /* { dg-message "\\d+ bytes" "note" } */
A.s = 1;
- int *ptr = (int *) &A; /* { dg-line assign1 } */
+ int32_t *ptr = (int32_t *) &A; /* { dg-line assign1 } */
return ptr;
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign1 } */
- /* { dg-message "assigned to 'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign1 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign1 } */
}
-int *test2 (void)
+int32_t *test2 (void)
{
- char arr[sizeof (int)];
- int *ptr = (int *)arr;
+ char arr[sizeof (int32_t)];
+ int32_t *ptr = (int32_t *)arr;
return ptr;
}
-int *test3 (void)
+int32_t *test3 (void)
{
- char arr[sizeof (short)]; /* { dg-message "\\d+ bytes" "note" } */
- int *ptr = (int *)arr; /* { dg-line assign3 } */
+ char arr[sizeof (int16_t)]; /* { dg-message "\\d+ bytes" "note" } */
+ int32_t *ptr = (int32_t *)arr; /* { dg-line assign3 } */
return ptr;
/* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign3 } */
- /* { dg-message "assigned to 'int \\*' here; 'sizeof \\(int\\)' is '\\d+'" "note" { target *-*-* } assign3 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target *-*-* } assign3 } */
}
--
2.36.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] analyzer: Use fixed-width types in allocation size tests
2022-07-02 23:20 ` [PATCH] analyzer: Use fixed-width types in allocation size tests Tim Lange
@ 2022-07-02 23:38 ` David Malcolm
2022-07-03 19:31 ` David Malcolm
0 siblings, 1 reply; 4+ messages in thread
From: David Malcolm @ 2022-07-02 23:38 UTC (permalink / raw)
To: Tim Lange, skpgkp2; +Cc: gcc-regression, gcc-patches
On Sun, 2022-07-03 at 01:20 +0200, Tim Lange wrote:
> Hi,
>
> thanks for the mail! Embarrassingly, I did not account for the
> different
> sizes types may have on different systems. I've switched all
> testcases
> to the fixed-width types of stdint.h.
>
> Does this patch need an approval?
Arguably falls under the "obvious" rule.
That said, the patch looks good to me, though given that the sizes are
now fixed the \\d+ regexps could be made more precise, if you like; I
think it's good either way.
Dave
>
> - Tim
>
> The patch changes the types inside the tests for the allocation size
> checker to fixed-width types of stdint.h to account for different
> architectures with different type widths.
>
> 2022-07-03 Tim Lange <mail@tim-lange.me>
>
> gcc/testsuite/ChangeLog:
>
> * gcc.dg/analyzer/allocation-size-1.c: Use fixed-length
> types.
> * gcc.dg/analyzer/allocation-size-2.c: Likewise.
> * gcc.dg/analyzer/allocation-size-3.c: Likewise.
> * gcc.dg/analyzer/allocation-size-4.c: Likewise.
> * gcc.dg/analyzer/allocation-size-5.c: Likewise.
>
> ---
> .../gcc.dg/analyzer/allocation-size-1.c | 53 +++++++-------
> .../gcc.dg/analyzer/allocation-size-2.c | 73 ++++++++++-------
> --
> .../gcc.dg/analyzer/allocation-size-3.c | 19 ++---
> .../gcc.dg/analyzer/allocation-size-4.c | 13 ++--
> .../gcc.dg/analyzer/allocation-size-5.c | 23 +++---
> 5 files changed, 93 insertions(+), 88 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
> b/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
> index 4fc2bf75d6c..e6d021a128f 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
> @@ -1,79 +1,80 @@
> #include <stdlib.h>
> #include <stdio.h>
> +#include <stdint.h>
>
> /* Tests with constant buffer sizes. */
>
> void test_1 (void)
> {
> - short *ptr = malloc (21 * sizeof (short));
> + int16_t *ptr = malloc (21 * sizeof (int16_t));
> free (ptr);
> }
>
> void test_2 (void)
> {
> - int *ptr = malloc (21 * sizeof (short)); /* { dg-line malloc2 } */
> + int32_t *ptr = malloc (21 * sizeof (int16_t)); /* { dg-line
> malloc2 } */
> free (ptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 }
> */
> /* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } malloc2 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } malloc2 } */
> }
>
> void test_3 (void)
> {
> - void *ptr = malloc (21 * sizeof (short));
> - short *sptr = (short *)ptr;
> + void *ptr = malloc (21 * sizeof (int16_t));
> + int16_t *sptr = (int16_t *)ptr;
> free (sptr);
> }
>
> void test_4 (void)
> {
> - void *ptr = malloc (21 * sizeof (short)); /* { dg-message "\\d+
> bytes" } */
> - int *iptr = (int *)ptr; /* { dg-line assign4 } */
> + void *ptr = malloc (21 * sizeof (int16_t)); /* { dg-message "\\d+
> bytes" } */
> + int32_t *iptr = (int32_t *)ptr; /* { dg-line assign4 } */
> free (iptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign4 }
> */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } assign4 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign4 } */
> }
>
> void test_5 (void)
> {
> - int user_input;
> + int32_t user_input;
> scanf("%i", &user_input);
> - int n;
> + int32_t n;
> if (user_input == 0)
> - n = 21 * sizeof (short);
> + n = 21 * sizeof (int16_t);
> else
> - n = 42 * sizeof (short);
> + n = 42 * sizeof (int16_t);
> void *ptr = malloc (n);
> - short *sptr = (short *)ptr;
> + int16_t *sptr = (int16_t *)ptr;
> free (sptr);
> }
>
> void test_6 (void)
> {
> - int user_input;
> + int32_t user_input;
> scanf("%i", &user_input);
> - int n;
> + int32_t n;
> if (user_input == 0)
> - n = 21 * sizeof (short);
> + n = 21 * sizeof (int16_t);
> else
> - n = 42 * sizeof (short);
> + n = 42 * sizeof (int16_t);
> void *ptr = malloc (n); /* { dg-message "" "note" } */
> /* ^^^ on widening_svalues no expr is
> returned
> by get_representative_tree at the
> moment. */
> - int *iptr = (int *)ptr; /* { dg-line assign6 } */
> + int32_t *iptr = (int32_t *)ptr; /* { dg-line assign6 } */
> free (iptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign6 }
> */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } assign6 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign6 } */
> }
>
> void test_7 (void)
> {
> - int user_input;
> + int32_t user_input;
> scanf("%i", &user_input);
> - int n;
> + int32_t n;
> if (user_input == 0)
> n = 1;
> else if (user_input == 2)
> @@ -82,18 +83,18 @@ void test_7 (void)
> n = 7;
> /* n is an unknown_svalue at this point. */
> void *ptr = malloc (n);
> - int *iptr = (int *)ptr;
> + int32_t *iptr = (int32_t *)ptr;
> free (iptr);
> }
>
> -void *create_buffer (int n)
> +void *create_buffer (int32_t n)
> {
> return malloc(n);
> }
>
> void test_8 (void)
> {
> - int *buf = create_buffer(4 * sizeof (int));
> + int32_t *buf = create_buffer(4 * sizeof (int));
> free (buf);
> }
>
> @@ -105,11 +106,11 @@ void test_9 (void)
> impl_region_model_context::warn. To ensure that the indentation
> in the diagnostic is right, the warning has to be emitted on an
> EN
> that is after the return edge. */
> - int *buf = create_buffer(42); /* { dg-warning "" "" { xfail *-*-*
> } } */
> + int32_t *buf = create_buffer(42); /* { dg-warning "" "" { xfail *-
> *-* } } */
> free (buf);
> }
>
> -void test_10 (int n)
> +void test_10 (int32_t n)
> {
> char *ptr = malloc (7 * n);
> free (ptr);
> diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
> b/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
> index 37bbbac87c5..69ca07561a6 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
> @@ -1,60 +1,61 @@
> #include <stdlib.h>
> #include <stdio.h>
> +#include <stdint.h>
>
> /* Tests with symbolic buffer sizes. */
>
> -void test_1 (int n)
> +void test_1 (int32_t n)
> {
> - short *ptr = malloc (n * sizeof (short));
> + int16_t *ptr = malloc (n * sizeof (int16_t));
> free (ptr);
> }
>
> -void test_2 (int n)
> +void test_2 (int32_t n)
> {
> - int *ptr = malloc (n * sizeof (short)); /* { dg-line malloc2 } */
> + int32_t *ptr = malloc (n * sizeof (int16_t)); /* { dg-line malloc2
> } */
> free (ptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 }
> */
> /* { dg-message "'\[a-z0-9\\*\\(\\)\\s\]*' bytes" "note" { target
> *-*-* } malloc2 } */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } malloc2 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } malloc2 } */
> }
>
> -void test_3 (int n)
> +void test_3 (int32_t n)
> {
> - void *ptr = malloc (n * sizeof (short));
> - short *sptr = (short *)ptr;
> + void *ptr = malloc (n * sizeof (int16_t));
> + int16_t *sptr = (int16_t *)ptr;
> free (sptr);
> }
>
> -void test_4 (int n)
> +void test_4 (int32_t n)
> {
> - void *ptr = malloc (n * sizeof (short)); /* { dg-message "'\[a-z0-
> 9\\*\\(\\)\\s\]*'" "note" } */
> - int *iptr = (int *)ptr; /* { dg-line assign4 } */
> + void *ptr = malloc (n * sizeof (int16_t)); /* { dg-message "'\[a-
> z0-9\\*\\(\\)\\s\]*'" "note" } */
> + int32_t *iptr = (int32_t *)ptr; /* { dg-line assign4 } */
> free (iptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign4 }
> */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } assign4 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign4 } */
> }
>
> void test_5 (void)
> {
> - int user_input;
> + int32_t user_input;
> scanf("%i", &user_input);
> - int n;
> + int32_t n;
> if (user_input == 0)
> - n = 3 * user_input * sizeof (short);
> + n = 3 * user_input * sizeof (int16_t);
> else
> - n = 5 * user_input * sizeof (short);
> + n = 5 * user_input * sizeof (int16_t);
> void *ptr = malloc (n);
> - short *sptr = (short *)ptr;
> + int16_t *sptr = (int16_t *)ptr;
> free (sptr);
> }
>
> void test_6 (void)
> {
> - int user_input;
> + int32_t user_input;
> scanf("%i", &user_input);
> - int n;
> + int32_t n;
> if (user_input == 0)
> n = user_input;
> else if (user_input == 2)
> @@ -63,22 +64,22 @@ void test_6 (void)
> n = user_input * 5;
> /* n is an unknown_svalue at this point. */
> void *ptr = malloc (n);
> - int *iptr = (int *)ptr;
> + int32_t *iptr = (int32_t *)ptr;
> free (iptr);
> }
>
> -void *create_buffer(int n)
> +void *create_buffer(int32_t n)
> {
> return malloc(n);
> }
>
> -void test_7(int n)
> +void test_7(int32_t n)
> {
> - int *buf = create_buffer(n * sizeof (int));
> + int32_t *buf = create_buffer(n * sizeof (int32_t));
> free (buf);
> }
>
> -void test_8(int n)
> +void test_8(int32_t n)
> {
> /* FIXME: At the moment, region_model::set_value (lhs,
> <return_value>)
> is called at the src_node of the return edge. This edge has no
> stmts
> @@ -86,33 +87,33 @@ void test_8(int n)
> impl_region_model_context::warn. To ensure that the indentation
> in the diagnostic is right, the warning has to be emitted on an
> EN
> that is after the return edge. */
> - int *buf = create_buffer(n * sizeof(short)); /* { dg-warning "" ""
> { xfail *-*-* } } */
> + int32_t *buf = create_buffer(n * sizeof(int16_t)); /* { dg-warning
> "" "" { xfail *-*-* } } */
> free (buf);
> }
>
> void test_9 (void)
> {
> - int n;
> + int32_t n;
> scanf("%i", &n);
> /* n is a conjured_svalue. */
> void *ptr = malloc (n); /* { dg-message "'n' bytes" "note" } */
> - int *iptr = (int *)ptr; /* { dg-line assign9 } */
> + int32_t *iptr = (int32_t *)ptr; /* { dg-line assign9 } */
> free (iptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign9 }
> */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } assign9 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign9 } */
> }
>
> void test_11 (void)
> {
> - int n;
> + int32_t n;
> scanf("%i", &n);
> void *ptr = malloc (n);
> - if (n == sizeof (int))
> + if (n == sizeof (int32_t))
> {
> /* n is a conjured_svalue but guarded such that we
> know the value is a multiple of sizeof (*iptr). */
> - int *iptr = (int *)ptr;
> + int32_t *iptr = (int32_t *)ptr;
> free (iptr);
> }
> else
> @@ -121,25 +122,25 @@ void test_11 (void)
>
> void test_12 (void)
> {
> - int n;
> + int32_t n;
> scanf("%i", &n);
> void *ptr = malloc (n); /* { dg-message "'n' bytes" } */
> if (n == 5)
> {
> /* n is a conjured_svalue but guarded such that we
> know the value isn't a multiple of sizeof (*iptr). */
> - int *iptr = (int *)ptr; /* { dg-line assign12 } */
> + int32_t *iptr = (int32_t *)ptr; /* { dg-line assign12 } */
> free (iptr);
> }
> else
> free (ptr);
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign12 }
> */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } assign12 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign12 } */
> }
>
> void test_13 (void)
> {
> - int n;
> + int32_t n;
> scanf("%i", &n);
> void *ptr = malloc (n);
> if (n == n * n)
> @@ -147,7 +148,7 @@ void test_13 (void)
> /* n is a conjured_svalue but guarded such that we don't have
> an
> equivalence class for it. In such cases, we assume that the
> condition ensures that the value is okay. */
> - int *iptr = (int *)ptr;
> + int32_t *iptr = (int32_t *)ptr;
> free (iptr);
> }
> else
> diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
> b/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
> index fdc1c56b7ee..eb63fa75578 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
> @@ -1,10 +1,11 @@
> #include <stdlib.h>
> #include <stdio.h>
> +#include <stdint.h>
>
> /* CWE-131 example 5 */
> void test_1 (void)
> {
> - int *id_sequence = (int *) malloc (3); /* { dg-line malloc1 } */
> + int32_t *id_sequence = (int32_t *) malloc (3); /* { dg-line
> malloc1 } */
> if (id_sequence == NULL) exit (1);
>
> id_sequence[0] = 13579;
> @@ -15,31 +16,31 @@ void test_1 (void)
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc1 }
> */
> /* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc1 } */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } malloc1 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } malloc1 } */
> }
>
> void test_2 (void)
> {
> - int *ptr = malloc (10 + sizeof(int)); /* { dg-line malloc2 } */
> + int32_t *ptr = malloc (10 + sizeof(int32_t)); /* { dg-line malloc2
> } */
> free (ptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 }
> */
> /* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } malloc2 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } malloc2 } */
> }
>
> -void test_3 (int n)
> +void test_3 (int32_t n)
> {
> - int *ptr = malloc (n + sizeof (int)); /* { dg-line malloc3 } */
> + int32_t *ptr = malloc (n + sizeof (int32_t)); /* { dg-line malloc3
> } */
> free (ptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc3 }
> */
> /* { dg-message "'\[a-z0-9\\+\\(\\)\\s\]*' bytes" "note" { target
> *-*-* } malloc3 } */
> - /* { dg-message "'int \\*' here; 'sizeof \\(int\\)' is '\\d+'"
> "note" { target *-*-* } malloc3 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } malloc3 } */
> }
>
> -void test_4 (int n, int m)
> +void test_4 (int32_t n, int32_t m)
> {
> - int *ptr = malloc ((n + m) * sizeof (int));
> + int32_t *ptr = malloc ((n + m) * sizeof (int32_t));
> free (ptr);
> }
> diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
> b/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
> index e475c1586a3..73cbcc5e509 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
> @@ -1,18 +1,19 @@
> #include <stdlib.h>
> +#include <stdint.h>
>
> /* Tests related to structs. */
>
> struct base {
> - int i;
> + int16_t i;
> };
>
> struct sub {
> struct base b;
> - int j;
> + int16_t j;
> };
>
> struct var_len {
> - int i;
> + int16_t i;
> char arr[];
> };
>
> @@ -25,12 +26,12 @@ void test_1 (void)
>
> void test_2 (void)
> {
> - long *ptr = malloc (5 * sizeof (struct base)); /* { dg-line
> malloc2 } */
> + int32_t *ptr = malloc (5 * sizeof (struct base)); /* { dg-line
> malloc2 } */
> free (ptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 }
> */
> /* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
> - /* { dg-message "'long (int)? \\*' here; 'sizeof \\(long
> (int)?\\)' is '\\d+'" "note" { target *-*-* } malloc2 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } malloc2 } */
> }
>
> void test_3 (void)
> @@ -51,7 +52,7 @@ void test_5 (void)
> {
> /* For constant sizes, we warn if the buffer
> is too small to hold a single struct. */
> - struct base *ptr = malloc (2); /* { dg-line malloc5 } */
> + struct base *ptr = malloc (1); /* { dg-line malloc5 } */
> free (ptr);
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc5 }
> */
> diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
> b/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
> index ae7e1074ebb..7769beec274 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
> @@ -1,36 +1,37 @@
> #include <stdlib.h>
> #include <stdio.h>
> +#include <stdint.h>
>
> /* Tests related to statically allocated buffers. */
>
> typedef struct a {
> - short s;
> + int16_t s;
> } a;
>
> -int *test_1 (void)
> +int32_t *test_1 (void)
> {
> a A; /* { dg-message "\\d+ bytes" "note" } */
> A.s = 1;
> - int *ptr = (int *) &A; /* { dg-line assign1 } */
> + int32_t *ptr = (int32_t *) &A; /* { dg-line assign1 } */
> return ptr;
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign1 }
> */
> - /* { dg-message "assigned to 'int \\*' here; 'sizeof \\(int\\)' is
> '\\d+'" "note" { target *-*-* } assign1 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign1 } */
> }
>
> -int *test2 (void)
> +int32_t *test2 (void)
> {
> - char arr[sizeof (int)];
> - int *ptr = (int *)arr;
> + char arr[sizeof (int32_t)];
> + int32_t *ptr = (int32_t *)arr;
> return ptr;
> }
>
> -int *test3 (void)
> +int32_t *test3 (void)
> {
> - char arr[sizeof (short)]; /* { dg-message "\\d+ bytes" "note" } */
> - int *ptr = (int *)arr; /* { dg-line assign3 } */
> + char arr[sizeof (int16_t)]; /* { dg-message "\\d+ bytes" "note" }
> */
> + int32_t *ptr = (int32_t *)arr; /* { dg-line assign3 } */
> return ptr;
>
> /* { dg-warning "allocated buffer size is not a multiple of the
> pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign3 }
> */
> - /* { dg-message "assigned to 'int \\*' here; 'sizeof \\(int\\)' is
> '\\d+'" "note" { target *-*-* } assign3 } */
> + /* { dg-message "'int32_t \\*' (\\\{aka 'int \\*'\\\})? here;
> 'sizeof \\(int32_t (\\\{aka int\\\})\\)' is '\\d+'" "note" { target
> *-*-* } assign3 } */
> }
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] analyzer: Use fixed-width types in allocation size tests
2022-07-02 23:38 ` David Malcolm
@ 2022-07-03 19:31 ` David Malcolm
0 siblings, 0 replies; 4+ messages in thread
From: David Malcolm @ 2022-07-03 19:31 UTC (permalink / raw)
To: Tim Lange, skpgkp2; +Cc: gcc-regression, gcc-patches
On Sat, 2022-07-02 at 19:38 -0400, David Malcolm wrote:
> On Sun, 2022-07-03 at 01:20 +0200, Tim Lange wrote:
> > Hi,
> >
> > thanks for the mail! Embarrassingly, I did not account for the
> > different
> > sizes types may have on different systems. I've switched all
> > testcases
> > to the fixed-width types of stdint.h.
> >
> > Does this patch need an approval?
>
> Arguably falls under the "obvious" rule.
>
> That said, the patch looks good to me, though given that the sizes
> are
> now fixed the \\d+ regexps could be made more precise, if you like; I
> think it's good either way.
...and in case I didn't say earlier, Tim: congratulations on getting
your first patch into gcc.
Dave
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-07-03 19:31 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-02 21:10 [r13-1405 Regression] FAIL: gcc.dg/analyzer/allocation-size-4.c warning at line 31 (test for warnings, line 28) on Linux/x86_64 skpandey
2022-07-02 23:20 ` [PATCH] analyzer: Use fixed-width types in allocation size tests Tim Lange
2022-07-02 23:38 ` David Malcolm
2022-07-03 19:31 ` David Malcolm
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).