1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
/* Verify that we warn for incorrect uses of "alloca" (which may be in a
macro in a system header), and that the output looks correct. */
/* { dg-additional-options "-fdiagnostics-path-format=inline-events -fdiagnostics-show-caret -fanalyzer-fine-grained" } */
/* { dg-require-effective-target alloca } */
#include <stdint.h>
#include "../../gcc.dg/analyzer/test-alloca.h"
void test_constant_99 (void)
{
int32_t *ptr = (int32_t *) alloca (99); /* { dg-warning "allocated buffer size is not a multiple of the pointee's size" } */
}
/* { dg-begin-multiline-output "" }
int32_t *ptr = (int32_t *) alloca (99);
^~~~~~
'test_constant_99': events 1-2
|
| int32_t *ptr = (int32_t *) alloca (99);
| ^~~~~~
| |
| (1) allocated 99 bytes here
| (2) assigned to 'int32_t *' {aka '{re:long :re?}int *'} here; 'sizeof (int32_t {aka {re:long :re?}int})' is '4'
|
{ dg-end-multiline-output "" { target c } } */
/* { dg-begin-multiline-output "" }
int32_t *ptr = (int32_t *) alloca (99);
^~~~~~
'void test_constant_99()': events 1-2
|
| int32_t *ptr = (int32_t *) alloca (99);
| ^~~~~~
| |
| (1) allocated 99 bytes here
| (2) assigned to 'int32_t*' {aka '{re:long :re?}int*'} here; 'sizeof (int32_t {aka {re:long :re?}int})' is '4'
|
{ dg-end-multiline-output "" { target c++ } } */
void test_symbolic (int n)
{
int32_t *ptr = (int32_t *) alloca (n * 2); /* { dg-warning "allocated buffer size is not a multiple of the pointee's size" } */
}
/* { dg-begin-multiline-output "" }
int32_t *ptr = (int32_t *) alloca (n * 2);
^~~~~~
'test_symbolic': events 1-2
|
| int32_t *ptr = (int32_t *) alloca (n * 2);
| ^~~~~~
| |
| (1) allocated 'n * 2' bytes here
| (2) assigned to 'int32_t *' {aka '{re:long :re?}int *'} here; 'sizeof (int32_t {aka {re:long :re?}int})' is '4'
|
{ dg-end-multiline-output "" { target c } } */
/* { dg-begin-multiline-output "" }
int32_t *ptr = (int32_t *) alloca (n * 2);
^~~~~~
'void test_symbolic(int)': events 1-2
|
| int32_t *ptr = (int32_t *) alloca (n * 2);
| ^~~~~~
| |
| (1) allocated '(n * 2)' bytes here
| (2) assigned to 'int32_t*' {aka '{re:long :re?}int*'} here; 'sizeof (int32_t {aka {re:long :re?}int})' is '4'
|
{ dg-end-multiline-output "" { target c++ } } */
|