Patchwork [C] Better locinfo for -Wc++-compat (PR c/61162)

login
register
mail settings
Submitter Marek Polacek
Date May 13, 2014, 5:23 a.m.
Message ID <20140513052347.GA2663@redhat.com>
Download mbox | patch
Permalink /patch/348230/
State New
Headers show

Comments

Marek Polacek - May 13, 2014, 5:23 a.m.
Tiny patch, just use available location instead of input_location.

Tested x86_64.  Ok?

2014-05-13  Marek Polacek  <polacek@redhat.com>

	PR c/61162
	* c-typeck.c (convert_for_assignment): Pass location to
	WARN_FOR_ASSIGNMENT instead of input_location.

	* gcc.dg/pr61162.c: New test.


	Marek
Joseph S. Myers - May 13, 2014, 5:30 p.m.
On Tue, 13 May 2014, Marek Polacek wrote:

> Tiny patch, just use available location instead of input_location.
> 
> Tested x86_64.  Ok?
> 
> 2014-05-13  Marek Polacek  <polacek@redhat.com>
> 
> 	PR c/61162
> 	* c-typeck.c (convert_for_assignment): Pass location to
> 	WARN_FOR_ASSIGNMENT instead of input_location.
> 
> 	* gcc.dg/pr61162.c: New test.

OK.

Patch

diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
index 4b1fe66..6f4bd4a 100644
--- gcc/c/c-typeck.c
+++ gcc/c/c-typeck.c
@@ -5754,7 +5754,7 @@  convert_for_assignment (location_t location, location_t expr_loc, tree type,
 	  && TREE_CODE (type) == ENUMERAL_TYPE
 	  && TYPE_MAIN_VARIANT (checktype) != TYPE_MAIN_VARIANT (type))
 	{
-	  WARN_FOR_ASSIGNMENT (input_location, OPT_Wc___compat,
+	  WARN_FOR_ASSIGNMENT (location, OPT_Wc___compat,
 			       G_("enum conversion when passing argument "
 				  "%d of %qE is invalid in C++"),
 			       G_("enum conversion in assignment is "
diff --git gcc/testsuite/gcc.dg/pr61162.c gcc/testsuite/gcc.dg/pr61162.c
index e69de29..00e64b9 100644
--- gcc/testsuite/gcc.dg/pr61162.c
+++ gcc/testsuite/gcc.dg/pr61162.c
@@ -0,0 +1,12 @@ 
+/* PR c/61162 */
+/* { dg-do compile } */
+/* { dg-options "-Wc++-compat" } */
+
+enum e { A };
+enum e
+fn1 (void)
+{
+  enum e e, q = 0; /* { dg-warning "17:enum conversion in initialization is invalid" } */
+  e = 0; /* { dg-warning "5:enum conversion in assignment is invalid" } */
+  1; return 0; /* { dg-warning "6:enum conversion in return is invalid" } */
+}