OSDN Git Service

2007-02-15 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Feb 2007 22:15:20 +0000 (22:15 +0000)
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Feb 2007 22:15:20 +0000 (22:15 +0000)
PR c++/28943
cp/
* call.c (build_conditional_expr): Improve error message.
testsuite/
* g++.dg/warn/pr28943.C: New.

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

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/pr28943.C [new file with mode: 0644]

index 342a7ba..fd068e4 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-15  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR c++/28943
+       * call.c (build_conditional_expr): Improve error message.
+       
 2007-02-13  Dirk Mueller  <dmueller@suse.de>
 
        * friend.c (do_friend): Annotate warning about friend
index ac29ecd..6690fa2 100644 (file)
@@ -3281,8 +3281,16 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
        result_type = void_type_node;
       else
        {
-         error ("%qE has type %<void%> and is not a throw-expression",
-                   VOID_TYPE_P (arg2_type) ? arg2 : arg3);
+         if (VOID_TYPE_P (arg2_type))
+            error ("second operand to the conditional operator "
+                   "is of type %<void%>, "
+                   "but the third operand is neither a throw-expression "
+                   "nor of type %<void%>");
+         else
+           error ("third operand to the conditional operator "
+                   "is of type %<void%>, "
+                  "but the second operand is neither a throw-expression "
+                   "nor of type %<void%>");
          return error_mark_node;
        }
 
index 91420fc..b876518 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-15  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR c++/28943
+       * g++.dg/warn/pr28943.C: New.
+
 2007-02-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        * gfortran.fortran-torture/execute/math.f90: Fix typo.
diff --git a/gcc/testsuite/g++.dg/warn/pr28943.C b/gcc/testsuite/g++.dg/warn/pr28943.C
new file mode 100644 (file)
index 0000000..046312c
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/28943 void and non-void in conditional expression
+// { dg-do compile }
+// { dg-options "" }
+
+void debug (const char * string)
+{
+  return;
+}
+
+int f()
+{
+  ( true == false ? 0 : debug ("Some string")); // { dg-error "third operand .* type 'void'.* second operand is neither a throw-expression nor of type 'void'" }
+  ( true == false ? debug ("Some string") : 0 ); // { dg-error "second operand .* type 'void'.* third operand is neither a throw-expression nor of type 'void'" }
+  return 0;
+}