]> gcc.gnu.org Git - gcc.git/commitdiff
re PR c++/45385 (missing -Wconversion for method calls)
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 21 Oct 2011 20:01:31 +0000 (20:01 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 21 Oct 2011 20:01:31 +0000 (20:01 +0000)
/cp
2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/45385
* init.c (build_vec_init): Early return error_mark_node if
maxindex is -1.

/c-family
2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/45385
* c-common.c (conversion_warning): Remove code looking for
artificial operands.

/testsuite
2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/45385
* g++.dg/warn/Wconversion4.C: New.

From-SVN: r180312

gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wconversion4.C [new file with mode: 0644]

index d0bcf0f87f8642bb4734daa2fa82b2ab0730cf6d..706b27378d56fca10be900799580face1953ea71 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/45385
+       * c-common.c (conversion_warning): Remove code looking for
+       artificial operands.
+
 2011-10-18  Dodji Seketeli  <dodji@redhat.com>
 
        PR bootstrap/50760
index 9d20d80981c3778cc9db7106ed5628d0a56e8d4f..ae18de3929cb28d503505e901d3b34394c67b5ea 100644 (file)
@@ -2121,23 +2121,12 @@ unsafe_conversion_p (tree type, tree expr, bool produce_warns)
 static void
 conversion_warning (tree type, tree expr)
 {
-  int i;
-  const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
   tree expr_type = TREE_TYPE (expr);
   location_t loc = EXPR_LOC_OR_HERE (expr);
 
   if (!warn_conversion && !warn_sign_conversion)
     return;
 
-  /* If any operand is artificial, then this expression was generated
-     by the compiler and we do not warn.  */
-  for (i = 0; i < expr_num_operands; i++)
-    {
-      tree op = TREE_OPERAND (expr, i);
-      if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
-       return;
-    }
-
   switch (TREE_CODE (expr))
     {
     case EQ_EXPR:
index b58ee153457a9cf94e8f96c1f5ad2df65ed7725b..f3eea05d5f93c23ff9d74c6f3836947e7ec9d121 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/45385
+       * init.c (build_vec_init): Early return error_mark_node if
+       maxindex is -1.
+
 2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/31423
index 4561979f72a7c810cd1c3f3ed0d9d951aff158d5..9115df3dba692e6da7729bd0df6eab2a52e1ebf9 100644 (file)
@@ -2998,7 +2998,8 @@ build_vec_init (tree base, tree maxindex, tree init,
   if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
     maxindex = array_type_nelts (atype);
 
-  if (maxindex == NULL_TREE || maxindex == error_mark_node)
+  if (maxindex == NULL_TREE || maxindex == error_mark_node
+      || integer_all_onesp (maxindex))
     return error_mark_node;
 
   if (explicit_value_init_p)
index 85aff916d9fab25dffef85eb41a22e30d55fa0a1..71aa33df3bd62891ed370197fabd12a5955d7b25 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-21  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/45385
+       * g++.dg/warn/Wconversion4.C: New.
+
 2011-10-21  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/50813
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion4.C b/gcc/testsuite/g++.dg/warn/Wconversion4.C
new file mode 100644 (file)
index 0000000..83daaa0
--- /dev/null
@@ -0,0 +1,17 @@
+// PR c++/45385
+// { dg-options "-Wconversion" } 
+
+void foo(unsigned char);
+
+class Test
+{
+  void eval()
+  {
+    foo(bar());  // { dg-warning "may alter its value" }
+  }
+
+  unsigned int bar() const
+  {
+    return __INT_MAX__ * 2U + 1;
+  }
+};
This page took 0.10337 seconds and 5 git commands to generate.