From b8656032abce68578d31c7656464023f7eb26988 Mon Sep 17 00:00:00 2001 From: carlos Date: Thu, 5 Jan 2006 19:07:16 +0000 Subject: [PATCH] gcc/ 2006-01-05 Carlos O'Donell * c-typeck.c (build_c_cast): Always warn when casting from a pointer to an integer of different size, even if the node was constant. gcc/testsuite 2006-01-05 Carlos O'Donell * gcc.dg/cast-1.c: Add new warning. * gcc.dg/cast-2.c: Likewise. * gcc.dg/cast-3.c: Likewise. * gcc.dg/format/cast-1.c: Likewise. * gcc.dg/cast-4.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109386 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/c-typeck.c | 8 ++++++-- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/cast-1.c | 2 +- gcc/testsuite/gcc.dg/cast-2.c | 2 +- gcc/testsuite/gcc.dg/cast-3.c | 2 +- gcc/testsuite/gcc.dg/cast-4.c | 13 +++++++++++++ gcc/testsuite/gcc.dg/format/cast-1.c | 2 +- 8 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/cast-4.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 026dade..6f86398 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-01-05 Carlos O'Donell + + * c-typeck.c (build_c_cast): Always warn when casting + from a pointer to an integer of different size, even if + the node was constant. + 2006-01-05 Richard Guenther PR tree-optimization/22555 diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 81fc40b..176ba7e 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3508,8 +3508,12 @@ build_c_cast (tree type, tree expr) if (TREE_CODE (type) == INTEGER_TYPE && TREE_CODE (otype) == POINTER_TYPE - && TYPE_PRECISION (type) != TYPE_PRECISION (otype) - && !TREE_CONSTANT (value)) + && TYPE_PRECISION (type) != TYPE_PRECISION (otype)) + /* Unlike conversion of integers to pointers, where the + warning is disabled for converting constants because + of cases such as SIG_*, warn about converting constant + pointers to integers. In some cases it may cause unwanted + sign extension, and a warning is appropriate. */ warning (OPT_Wpointer_to_int_cast, "cast from pointer to integer of different size"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 640c926..eb11257 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2006-01-05 Carlos O'Donell + + * gcc.dg/cast-1.c: Add new warning. + * gcc.dg/cast-2.c: Likewise. + * gcc.dg/cast-3.c: Likewise. + * gcc.dg/format/cast-1.c: Likewise. + * gcc.dg/cast-4.c: New testcase. + 2006-01-05 Richard Guenther PR tree-optimization/22555 diff --git a/gcc/testsuite/gcc.dg/cast-1.c b/gcc/testsuite/gcc.dg/cast-1.c index e3d79db..8924264 100644 --- a/gcc/testsuite/gcc.dg/cast-1.c +++ b/gcc/testsuite/gcc.dg/cast-1.c @@ -37,5 +37,5 @@ f (void) (void *) c; /* { dg-warning "warning: cast to pointer from integer of different size" } */ (void *) (char) 1; (char) p; /* { dg-warning "warning: cast from pointer to integer of different size" } */ - (char) (void *) 1; + (char) (void *) 1; /* { dg-warning "warning: cast from pointer to integer of different size" } */ } diff --git a/gcc/testsuite/gcc.dg/cast-2.c b/gcc/testsuite/gcc.dg/cast-2.c index 0f84c22..eff465e 100644 --- a/gcc/testsuite/gcc.dg/cast-2.c +++ b/gcc/testsuite/gcc.dg/cast-2.c @@ -37,5 +37,5 @@ f (void) (void *) c; /* { dg-warning "warning: cast to pointer from integer of different size" } */ (void *) (char) 1; (char) p; /* { dg-warning "warning: cast from pointer to integer of different size" } */ - (char) (void *) 1; + (char) (void *) 1; /* { dg-warning "warning: cast from pointer to integer of different size" } */ } diff --git a/gcc/testsuite/gcc.dg/cast-3.c b/gcc/testsuite/gcc.dg/cast-3.c index 656bf6d..26a38cb 100644 --- a/gcc/testsuite/gcc.dg/cast-3.c +++ b/gcc/testsuite/gcc.dg/cast-3.c @@ -37,5 +37,5 @@ f (void) (void *) c; /* { dg-warning "warning: cast to pointer from integer of different size" } */ (void *) (char) 1; (char) p; /* { dg-warning "warning: cast from pointer to integer of different size" } */ - (char) (void *) 1; + (char) (void *) 1; /* { dg-warning "warning: cast from pointer to integer of different size" } */ } diff --git a/gcc/testsuite/gcc.dg/cast-4.c b/gcc/testsuite/gcc.dg/cast-4.c new file mode 100644 index 0000000..32b02cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/cast-4.c @@ -0,0 +1,13 @@ +/* Test warnings when casting from a constant integer to pointer. + Test with -pedantic-errors. */ +/* Origin: Carlos O'Donell */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99 -pedantic-errors" } */ + +extern int i; +char c; +void +f (void) +{ + c = (char)&i; /* { dg-warning "warning: cast from pointer to integer of different size" } */ +} diff --git a/gcc/testsuite/gcc.dg/format/cast-1.c b/gcc/testsuite/gcc.dg/format/cast-1.c index 78a4f52..76e7cc5 100644 --- a/gcc/testsuite/gcc.dg/format/cast-1.c +++ b/gcc/testsuite/gcc.dg/format/cast-1.c @@ -12,5 +12,5 @@ f (int x) { printf("%s", x); /* { dg-warning "format" } */ printf((char *)(size_t)"%s", x); /* { dg-warning "format" } */ - printf((char *)(char)"%s", x); + printf((char *)(char)"%s", x); /* { dg-warning "warning: cast from pointer to integer of different size" } */ } -- 2.7.4