OSDN Git Service

2010-04-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Apr 2010 07:49:41 +0000 (07:49 +0000)
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Apr 2010 07:49:41 +0000 (07:49 +0000)
PR c++/28584
* c.opt (Wint-to-pointer-cast): Available in C++.
* doc/invoke.texi (Wint-to-pointer-cast): Available in C++.
cp/
* typeck.c (cp_build_c_cast): Warn for casting integer to larger
pointer type.
testsuite/
* gcc.dg/Wint-to-pointer-cast-1.c: Move to...
* c-c++-common/Wint-to-pointer-cast-1.c: ...  here.
* gcc.dg/Wint-to-pointer-cast-2.c: Move to...
* c-c++-common/Wint-to-pointer-cast-2.c: ...  here.
* gcc.dg/Wint-to-pointer-cast-3.c: Move to...
* c-c++-common/Wint-to-pointer-cast-3.c: ...  here. Update.
* g++.old-deja/g++.mike/warn1.C: Add -Wno-int-to-pointer-cast.
* g++.dg/other/increment1.C: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158150 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c.opt
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/Wint-to-pointer-cast-1.c [moved from gcc/testsuite/gcc.dg/Wint-to-pointer-cast-1.c with 100% similarity]
gcc/testsuite/c-c++-common/Wint-to-pointer-cast-2.c [moved from gcc/testsuite/gcc.dg/Wint-to-pointer-cast-2.c with 100% similarity]
gcc/testsuite/c-c++-common/Wint-to-pointer-cast-3.c [moved from gcc/testsuite/gcc.dg/Wint-to-pointer-cast-3.c with 55% similarity]
gcc/testsuite/g++.dg/other/increment1.C
gcc/testsuite/g++.old-deja/g++.mike/warn1.C

index 9b1c69e..23377d1 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-09  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR c++/28584
+       * c.opt (Wint-to-pointer-cast): Available in C++.
+       * doc/invoke.texi (Wint-to-pointer-cast): Available in C++.
+
 2010-04-08  Eric Botcazou  <ebotcazou@adacore.com>
 
        * tree.h (TREE_ADDRESSABLE): Document its effect for function types.
 2010-04-08  Eric Botcazou  <ebotcazou@adacore.com>
 
        * tree.h (TREE_ADDRESSABLE): Document its effect for function types.
index a148208..973acf4 100644 (file)
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -277,7 +277,7 @@ Wimport
 C ObjC C++ ObjC++ Undocumented
 
 Wint-to-pointer-cast
 C ObjC C++ ObjC++ Undocumented
 
 Wint-to-pointer-cast
-C ObjC Var(warn_int_to_pointer_cast) Init(1) Warning
+C ObjC C++ ObjC++ Var(warn_int_to_pointer_cast) Init(1) Warning
 Warn when there is a cast to a pointer from an integer of a different size
 
 Winvalid-offsetof
 Warn when there is a cast to a pointer from an integer of a different size
 
 Winvalid-offsetof
index fa01fcb..c40e368 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-09  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR c++/28584
+       * typeck.c (cp_build_c_cast): Warn for casting integer to larger
+       pointer type.
+
 2010-04-07  Jason Merrill  <jason@redhat.com>
 
        PR c++/43016
 2010-04-07  Jason Merrill  <jason@redhat.com>
 
        PR c++/43016
index f623717..383754b 100644 (file)
@@ -6289,6 +6289,15 @@ cp_build_c_cast (tree type, tree expr, tsubst_flags_t complain)
       return error_mark_node;
     }
 
       return error_mark_node;
     }
 
+  if (TREE_CODE (type) == POINTER_TYPE
+      && TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
+      /* Casting to an integer of smaller size is an error detected elsewhere.  */
+      && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (value))
+      /* Don't warn about converting any constant.  */
+      && !TREE_CONSTANT (value))
+    warning_at (input_location, OPT_Wint_to_pointer_cast, 
+               "cast to pointer from integer of different size");
+
   /* A C-style cast can be a const_cast.  */
   result = build_const_cast_1 (type, value, /*complain=*/false,
                               &valid_p);
   /* A C-style cast can be a const_cast.  */
   result = build_const_cast_1 (type, value, /*complain=*/false,
                               &valid_p);
index 7a8ca55..ad7d097 100644 (file)
@@ -4284,11 +4284,13 @@ warning about it.
 The restrictions on @samp{offsetof} may be relaxed in a future version
 of the C++ standard.
 
 The restrictions on @samp{offsetof} may be relaxed in a future version
 of the C++ standard.
 
-@item -Wno-int-to-pointer-cast @r{(C and Objective-C only)}
+@item -Wno-int-to-pointer-cast
 @opindex Wno-int-to-pointer-cast
 @opindex Wint-to-pointer-cast
 Suppress warnings from casts to pointer type of an integer of a
 @opindex Wno-int-to-pointer-cast
 @opindex Wint-to-pointer-cast
 Suppress warnings from casts to pointer type of an integer of a
-different size.
+different size. In C++, casting to a pointer type of smaller size is
+an error. @option{Wint-to-pointer-cast} is enabled by default.
+
 
 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
 @opindex Wno-pointer-to-int-cast
 
 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
 @opindex Wno-pointer-to-int-cast
index 5b77482..17277cf 100644 (file)
@@ -1,3 +1,15 @@
+2010-04-09  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR c++/28584
+       * gcc.dg/Wint-to-pointer-cast-1.c: Move to...
+       * c-c++-common/Wint-to-pointer-cast-1.c: ...  here.
+       * gcc.dg/Wint-to-pointer-cast-2.c: Move to...   
+       * c-c++-common/Wint-to-pointer-cast-2.c: ...  here.
+       * gcc.dg/Wint-to-pointer-cast-3.c: Move to...   
+       * c-c++-common/Wint-to-pointer-cast-3.c: ...  here. Update.
+       * g++.old-deja/g++.mike/warn1.C: Add -Wno-int-to-pointer-cast.
+       * g++.dg/other/increment1.C: Likewise.
+
 2010-04-09  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/18918
 2010-04-09  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/18918
@@ -16,5 +16,7 @@ void *p;
 char
 g (void)
 {
 char
 g (void)
 {
-  return (char) p; /* { dg-warning "cast from pointer to integer of different size" } */
+  return (char) p;
+/* { dg-warning "cast from pointer to integer of different size" "" { target c } 19 } */
+/* { dg-error "cast from 'void\\*' to 'char' loses precision" "" { target c++ } 19 } */
 }
 }
index c36e573..506157e 100644 (file)
@@ -1,5 +1,6 @@
 // PR c++/37561
 // { dg-do compile }
 // PR c++/37561
 // { dg-do compile }
+// { dg-options "-Wno-int-to-pointer-cast" }
 
 __PTRDIFF_TYPE__ p;
 char q;
 
 __PTRDIFF_TYPE__ p;
 char q;
index 52059cb..5d6fdec 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do assemble  }
 // { dg-do assemble  }
-// { dg-options "-Wall" }
+// { dg-options "-Wall -Wno-int-to-pointer-cast" }
 
 typedef char * charptr;
 typedef __SIZE_TYPE__ size_t;
 
 typedef char * charptr;
 typedef __SIZE_TYPE__ size_t;