From 583272a21e6049df9034256ab8aefd809663002e Mon Sep 17 00:00:00 2001
From: manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 23 Nov 2006 18:39:32 +0000
Subject: [PATCH] 2006-11-23  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

	PR c/9072
	* c.opt (Wtraditional-conversion): New.
	(Wconversion): Update description.
	* c-typeck.c (convert_arguments): Warnings for prototypes causing
	type conversions different from what would happen in the absence
	of prototype are now handled by Wtraditional-conversion.
	* doc/invoke.texi (Wtraditional-conversion): New.
	(Wconversion): Update description.
	* doc/trouble.texi (Wconversion): Replace Wconversion by
	Wtraditional-conversion.

testsuite/

	PR c/9072
	* gcc.dg/builtin-protos-1.c: Replace Wconversion by
	Wtraditional-conversion.
	* gcc.dg/overflow-warn-2.c: Likewise.
	* gcc.dg/Wconversion.c: Likewise. Renamed as
	Wtraditional-conversion.c .
	* gcc.dg/Wconversion-2.c: Likewise. Renamed as
	Wtraditional-conversion-2.c .
	* gcc.dg/dfp/Wconversion-2.c: Likewise. Renamed as
	Wtraditional-conversion-2.c
	* gcc.dg/Wconversion-negative-constants.c: New.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119129 138bc75d-0d04-0410-961f-82ee72b054a4
---
 ChangeLog                                     |  2 +-
 gcc/ChangeLog                                 | 13 +++++
 gcc/c-typeck.c                                | 12 ++---
 gcc/c.opt                                     |  6 ++-
 gcc/doc/invoke.texi                           | 26 ++++-----
 gcc/doc/trouble.texi                          |  6 +--
 gcc/testsuite/ChangeLog                       | 14 +++++
 .../gcc.dg/Wconversion-negative-constants.c   | 54 +++++++++++++++++++
 ...ersion-2.c => Wtraditional-conversion-2.c} |  4 +-
 ...conversion.c => Wtraditional-conversion.c} |  2 +-
 gcc/testsuite/gcc.dg/builtin-protos-1.c       |  2 +-
 ...ersion-2.c => Wtraditional-conversion-2.c} |  6 ++-
 gcc/testsuite/gcc.dg/overflow-warn-2.c        | 44 +++++++--------
 13 files changed, 140 insertions(+), 51 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/Wconversion-negative-constants.c
 rename gcc/testsuite/gcc.dg/{Wconversion-2.c => Wtraditional-conversion-2.c} (95%)
 rename gcc/testsuite/gcc.dg/{Wconversion.c => Wtraditional-conversion.c} (90%)
 rename gcc/testsuite/gcc.dg/dfp/{Wconversion-2.c => Wtraditional-conversion-2.c} (94%)

diff --git a/ChangeLog b/ChangeLog
index f31632fb39d7..0ce87445c74a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,6 @@
 2006-11-23  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
-        * MAINTAINERS (Write After Approval): Add myself.
+	* MAINTAINERS (Write After Approval): Add myself.
 
 2006-11-22  Philipp Thomas <pth@suse.de>
 
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cfd031d5386e..f649c7b77493 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2006-11-23  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+	PR c/9072 
+	* c.opt (Wtraditional-conversion): New.
+	(Wconversion): Update description.
+	* c-typeck.c (convert_arguments): Warnings for prototypes causing
+	type conversions different from what would happen in the absence
+	of prototype are now handled by Wtraditional-conversion.
+	* doc/invoke.texi (Wtraditional-conversion): New.
+	(Wconversion): Update description.
+	* doc/trouble.texi (Wconversion): Replace Wconversion by
+	Wtraditional-conversion.
+
 2006-11-23  Andrew Pinski  <pinskia@gmail.com>
 
 	* predict.c (tree_estimate_probability): Check to make
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 30b438260c64..1b0e33a79468 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -2427,7 +2427,7 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
 	    {
 	      /* Optionally warn about conversions that
 		 differ from the default conversions.  */
-	      if (warn_conversion || warn_traditional)
+	      if (warn_traditional_conversion || warn_traditional)
 		{
 		  unsigned int formal_prec = TYPE_PRECISION (type);
 
@@ -2503,8 +2503,8 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
 		    }
 		  /* Detect integer changing in width or signedness.
 		     These warnings are only activated with
-		     -Wconversion, not with -Wtraditional.  */
-		  else if (warn_conversion && INTEGRAL_TYPE_P (type)
+		     -Wtraditional-conversion, not with -Wtraditional.  */
+		  else if (warn_traditional_conversion && INTEGRAL_TYPE_P (type)
 			   && INTEGRAL_TYPE_P (TREE_TYPE (val)))
 		    {
 		      tree would_have_been = default_conversion (val);
@@ -2517,7 +2517,7 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
 			   and the actual arg is that enum type.  */
 			;
 		      else if (formal_prec != TYPE_PRECISION (type1))
-			warning (OPT_Wconversion, "passing argument %d of %qE "
+			warning (OPT_Wtraditional_conversion, "passing argument %d of %qE "
 				 "with different width due to prototype",
 				 argnum, rname);
 		      else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
@@ -2540,11 +2540,11 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
 			       && TYPE_UNSIGNED (TREE_TYPE (val)))
 			;
 		      else if (TYPE_UNSIGNED (type))
-			warning (OPT_Wconversion, "passing argument %d of %qE "
+			warning (OPT_Wtraditional_conversion, "passing argument %d of %qE "
 				 "as unsigned due to prototype",
 				 argnum, rname);
 		      else
-			warning (OPT_Wconversion, "passing argument %d of %qE "
+			warning (OPT_Wtraditional_conversion, "passing argument %d of %qE "
 				 "as signed due to prototype", argnum, rname);
 		    }
 		}
diff --git a/gcc/c.opt b/gcc/c.opt
index 01cb779dc31c..6cd179038a66 100644
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -151,7 +151,7 @@ Synonym for -Wcomment
 
 Wconversion
 C ObjC C++ ObjC++ Var(warn_conversion)
-Warn about possibly confusing type conversions
+Warn for implicit type conversions that may change a value
 
 Wctor-dtor-privacy
 C++ ObjC++ Var(warn_ctor_dtor_privacy)
@@ -399,6 +399,10 @@ Wtraditional
 C ObjC Var(warn_traditional)
 Warn about features not present in traditional C
 
+Wtraditional-conversion
+C ObjC Var(warn_traditional_conversion)
+Warn of prototypes causing type conversions different from what would happen in the absence of prototype
+
 Wtrigraphs
 C ObjC C++ ObjC++
 Warn if trigraphs are encountered that might affect the meaning of the program
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 2cef7e6f1dd6..9f22681db32b 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -255,7 +255,7 @@ Objective-C and Objective-C++ Dialects}.
 @item C-only Warning Options
 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
 -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition @gol
--Wstrict-prototypes  -Wtraditional @gol
+-Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
 -Wdeclaration-after-statement -Wpointer-sign}
 
 @item Debugging Options
@@ -3058,7 +3058,7 @@ traditional C case.
 Conversions by prototypes between fixed/floating point values and vice
 versa.  The absence of these prototypes when compiling with traditional
 C would cause serious problems.  This is a subset of the possible
-conversion warnings, for the full set use @option{-Wconversion}.
+conversion warnings, for the full set use @option{-Wtraditional-conversion}.
 
 @item
 Use of ISO C style function definitions.  This warning intentionally is
@@ -3070,6 +3070,14 @@ because that feature is already a GCC extension and thus not relevant to
 traditional C compatibility.
 @end itemize
 
+@item -Wtraditional-conversion @r{(C only)}
+@opindex Wtraditional-conversion
+Warn if a prototype causes a type conversion that is different from what
+would happen to the same argument in the absence of a prototype.  This
+includes conversions of fixed point to floating and vice versa, and
+conversions changing the width or signedness of a fixed point argument
+except when the same as the default promotion.
+
 @item -Wdeclaration-after-statement @r{(C only)}
 @opindex Wdeclaration-after-statement
 Warn when a declaration is found after a statement in a block.  This
@@ -3148,16 +3156,10 @@ this is why we did not make @option{-Wall} request these warnings.
 
 @item -Wconversion
 @opindex Wconversion
-Warn if a prototype causes a type conversion that is different from what
-would happen to the same argument in the absence of a prototype.  This
-includes conversions of fixed point to floating and vice versa, and
-conversions changing the width or signedness of a fixed point argument
-except when the same as the default promotion.
-
-Also, warn if a negative integer constant expression is implicitly
-converted to an unsigned type.  For example, warn about the assignment
-@code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
-casts like @code{(unsigned) -1}.
+Warn if a negative integer constant expression is implicitly converted
+to an unsigned type.  For example, warn about the assignment
+@code{unsigned x = -1} if @code{x} is unsigned. But do not warn about
+explicit casts like @code{(unsigned) -1}.
 
 @item -Wsign-compare
 @opindex Wsign-compare
diff --git a/gcc/doc/trouble.texi b/gcc/doc/trouble.texi
index c65ad70bebea..505f821d39b9 100644
--- a/gcc/doc/trouble.texi
+++ b/gcc/doc/trouble.texi
@@ -985,10 +985,10 @@ you are removing prototypes that were made with @command{protoize}; if
 the program worked before without any prototypes, it will work again
 without them.
 
-@opindex Wconversion
+@opindex Wtraditional-conversion
 You can find all the places where this problem might occur by compiling
-the program with the @option{-Wconversion} option.  It prints a warning
-whenever an argument is converted.
+the program with the @option{-Wtraditional-conversion} option.  It
+prints a warning whenever an argument is converted.
 
 @item
 Both conversion programs can be confused if there are macro calls in and
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3fc471e1c6d4..d78a3e52a7b1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,17 @@
+2006-11-23  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+	PR c/9072 
+	* gcc.dg/builtin-protos-1.c: Replace Wconversion by
+	Wtraditional-conversion.
+	* gcc.dg/overflow-warn-2.c: Likewise.
+	* gcc.dg/Wconversion.c: Likewise. Renamed as
+	Wtraditional-conversion.c .
+	* gcc.dg/Wconversion-2.c: Likewise. Renamed as
+	Wtraditional-conversion-2.c .
+	* gcc.dg/dfp/Wconversion-2.c: Likewise. Renamed as
+	Wtraditional-conversion-2.c 
+	* gcc.dg/Wconversion-negative-constants.c: New.
+
 2006-11-23  Andrew Pinski  <pinskia@gmail.com>
 
 	* gcc.dg/tree-ssa/dump-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/Wconversion-negative-constants.c b/gcc/testsuite/gcc.dg/Wconversion-negative-constants.c
new file mode 100644
index 000000000000..80ef4105cfc5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wconversion-negative-constants.c
@@ -0,0 +1,54 @@
+/* Test for diagnostics for negative constants converted to unsigned types.
+   These tests come from gcc/testsuite/gcc.dg/overflow-warn-2.c  */
+
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -Wconversion" } */
+
+#include <limits.h>
+
+void fuc (unsigned char);
+
+void hc (int x)
+{
+  unsigned char uc;
+
+  fuc (-1); /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  uc = -1; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  uc = x ? 1U : -1; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  uc = x ? SCHAR_MIN : 1U; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  uc = '\xa0'; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+
+  fuc('A');
+  uc = 'A';
+
+  uc = x ? 1 : -1;
+
+  uc = x ? SCHAR_MIN : 1;
+}
+
+unsigned fui (unsigned int ui);
+
+void hi (int x)
+{
+  unsigned ui;
+
+  fui (-1); /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  ui = -1; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  ui = x ? 1U : -1; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  ui = x ? INT_MIN : 1U; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  ui = ui ? SCHAR_MIN : 1U; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  ui = 1U * -1; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+  ui = ui + INT_MIN; /* { dg-warning "negative integer implicitly converted to unsigned type" } */
+
+  ui = -1 * (1 * -1);
+  ui = (unsigned) -1;
+
+  ui = x ? 1 : -1;
+
+  ui = x ? INT_MIN : 1;
+
+  ui = ui ? SCHAR_MIN : 1;
+}
+
+
+unsigned fui(unsigned a) { return a + -1; } /* { dg-warning "negative integer implicitly converted to unsigned type" } */
diff --git a/gcc/testsuite/gcc.dg/Wconversion-2.c b/gcc/testsuite/gcc.dg/Wtraditional-conversion-2.c
similarity index 95%
rename from gcc/testsuite/gcc.dg/Wconversion-2.c
rename to gcc/testsuite/gcc.dg/Wtraditional-conversion-2.c
index 320f41f01201..60f0f64bd0e0 100644
--- a/gcc/testsuite/gcc.dg/Wconversion-2.c
+++ b/gcc/testsuite/gcc.dg/Wtraditional-conversion-2.c
@@ -1,8 +1,8 @@
-/* Test messages for -Wconversion, including that they are not
+/* Test messages for -Wtraditional-conversion, including that they are not
    pedwarns.  */
 /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
 /* { dg-do compile } */
-/* { dg-options "-std=c99 -pedantic-errors -Wconversion" } */
+/* { dg-options "-std=c99 -pedantic-errors -Wtraditional-conversion" } */
 
 void fsc(signed char);
 void fsi(signed int);
diff --git a/gcc/testsuite/gcc.dg/Wconversion.c b/gcc/testsuite/gcc.dg/Wtraditional-conversion.c
similarity index 90%
rename from gcc/testsuite/gcc.dg/Wconversion.c
rename to gcc/testsuite/gcc.dg/Wtraditional-conversion.c
index 7cbcb6a4461b..a3f04acb5f82 100644
--- a/gcc/testsuite/gcc.dg/Wconversion.c
+++ b/gcc/testsuite/gcc.dg/Wtraditional-conversion.c
@@ -5,7 +5,7 @@
    not used in the appropriate place in the warning code.  */
 
 /* { dg-do compile } */
-/* { dg-options -Wconversion } */
+/* { dg-options -Wtraditional-conversion } */
 
 typedef enum { a } __attribute__((packed)) t;
 void f(t x) {}
diff --git a/gcc/testsuite/gcc.dg/builtin-protos-1.c b/gcc/testsuite/gcc.dg/builtin-protos-1.c
index c3cdc533feda..85f96cff0c1c 100644
--- a/gcc/testsuite/gcc.dg/builtin-protos-1.c
+++ b/gcc/testsuite/gcc.dg/builtin-protos-1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options -Wconversion } */
+/* { dg-options -Wtraditional-conversion } */
 
 int
 test_s (signed int x)
diff --git a/gcc/testsuite/gcc.dg/dfp/Wconversion-2.c b/gcc/testsuite/gcc.dg/dfp/Wtraditional-conversion-2.c
similarity index 94%
rename from gcc/testsuite/gcc.dg/dfp/Wconversion-2.c
rename to gcc/testsuite/gcc.dg/dfp/Wtraditional-conversion-2.c
index afc0b4dab2b6..b5738c9d4397 100644
--- a/gcc/testsuite/gcc.dg/dfp/Wconversion-2.c
+++ b/gcc/testsuite/gcc.dg/dfp/Wtraditional-conversion-2.c
@@ -1,6 +1,8 @@
-/* Test messages for -Wconversion (based on gcc.dg/Wconversion-2.c).  */
+/* Test messages for -Wtraditional-conversion 
+   (based on gcc.dg/Wtraditional-conversion-2.c).  */
+
 /* { dg-do compile } */
-/* { dg-options "-std=gnu99 -Wconversion" } */
+/* { dg-options "-std=gnu99 -Wtraditional-conversion" } */
 
 void fsi(signed int);
 void fd32(_Decimal32);
diff --git a/gcc/testsuite/gcc.dg/overflow-warn-2.c b/gcc/testsuite/gcc.dg/overflow-warn-2.c
index 189f72703631..3fa75b639b38 100644
--- a/gcc/testsuite/gcc.dg/overflow-warn-2.c
+++ b/gcc/testsuite/gcc.dg/overflow-warn-2.c
@@ -1,7 +1,7 @@
-/* Test for diagnostics for constant overflow.  Test with -Wconversion.  */
+/* Test for diagnostics for constant overflow.  Test with -Wtraditional-conversion.  */
 /* Origin: Joseph Myers <joseph@codesourcery.com> */
 /* { dg-do compile } */
-/* { dg-options "-std=c99 -Wconversion" } */
+/* { dg-options "-std=c99 -Wtraditional-conversion" } */
 
 #include <limits.h>
 
@@ -82,23 +82,23 @@ void
 h2 (void)
 {
   fsc (SCHAR_MAX + 1);
-  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wconversion" { target *-*-* } 84 } */
+  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 84 } */
   fsc (SCHAR_MIN - 1); /* { dg-warning "warning: overflow in implicit constant conversion" } */
-  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wconversion" { target *-*-* } 86 } */
+  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 86 } */
   fsc (UCHAR_MAX);
-  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wconversion" { target *-*-* } 88 } */
+  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 88 } */
   fsc (UCHAR_MAX + 1); /* { dg-warning "warning: overflow in implicit constant conversion" } */
-  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wconversion" { target *-*-* } 90 } */
-  fuc (-1); /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wconversion" { target *-*-* } 92 } */
+  /* { dg-warning "warning: passing argument 1 of 'fsc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 90 } */
+  fuc (-1);
+  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 92 } */
   fuc (UCHAR_MAX + 1); /* { dg-warning "warning: large integer implicitly truncated to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wconversion" { target *-*-* } 94 } */
-  fuc (SCHAR_MIN); /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wconversion" { target *-*-* } 96 } */
+  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 94 } */
+  fuc (SCHAR_MIN);
+  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 96 } */
   fuc (SCHAR_MIN - 1); /* { dg-warning "warning: large integer implicitly truncated to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wconversion" { target *-*-* } 98 } */
+  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 98 } */
   fuc (-UCHAR_MAX); /* { dg-warning "warning: large integer implicitly truncated to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wconversion" { target *-*-* } 100 } */
+  /* { dg-warning "warning: passing argument 1 of 'fuc' with different width due to prototype" "-Wtraditional-conversion" { target *-*-* } 100 } */
 }
 
 void fui (unsigned int);
@@ -111,7 +111,7 @@ void
 h2i (int x)
 {
   /* For some reason, we only give certain warnings for implicit
-     conversions among values of the same precision with -Wconversion,
+     conversions among values of the same precision with -Wtraditional-conversion,
      while we don't give others at all.  */
   fsi ((unsigned)INT_MAX + 1); /* { dg-warning "warning: passing argument 1 of 'fsi' as signed due to prototype" } */
   si = (unsigned)INT_MAX + 1;
@@ -121,12 +121,12 @@ h2i (int x)
   si = x ? (unsigned)INT_MAX + 2 : 1;
   fsi (UINT_MAX); /* { dg-warning "warning: passing argument 1 of 'fsi' as signed due to prototype" } */
   si = UINT_MAX;
-  fui (-1); /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fui' as unsigned due to prototype" "-Wconversion" { target *-*-* } 124 } */
-  ui = -1; /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  ui = x ? -1 : 1U; /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  fui (INT_MIN); /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  /* { dg-warning "warning: passing argument 1 of 'fui' as unsigned due to prototype" "-Wconversion" { target *-*-* } 128 } */
-  ui = INT_MIN; /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
-  ui = x ? INT_MIN : 1U; /* { dg-warning "warning: negative integer implicitly converted to unsigned type" } */
+  fui (-1);
+  /* { dg-warning "warning: passing argument 1 of 'fui' as unsigned due to prototype" "-Wtraditional-conversion" { target *-*-* } 124 } */
+  ui = -1;
+  ui = x ? -1 : 1U;
+  fui (INT_MIN);
+  /* { dg-warning "warning: passing argument 1 of 'fui' as unsigned due to prototype" "-Wtraditional-conversion" { target *-*-* } 128 } */
+  ui = INT_MIN;
+  ui = x ? INT_MIN : 1U;
 }
-- 
GitLab