From 4efc42b99c96b026f560b0918de7e237ac3dc8d1 Mon Sep 17 00:00:00 2001
From: Richard Purdie <richard.purdie@linuxfoundation.org>
Date: Tue, 10 Mar 2020 08:26:53 -0700
Subject: [PATCH] gentypes/genmodes: Do not use __LINE__ for maintaining
 reproducibility

Inserting line numbers into generated code means its not always reproducible wth
differing versions of host gcc. Void the issue by not adding these.

Upstream-Status: Inappropriate [OE Reproducibility specific]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 gcc/gengtype.cc |  6 +++---
 gcc/genmodes.cc | 32 ++++++++++++++++----------------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/gcc/gengtype.cc b/gcc/gengtype.cc
index 386ae1b0506..9762e914296 100644
--- a/gcc/gengtype.cc
+++ b/gcc/gengtype.cc
@@ -1006,7 +1006,7 @@ create_field_at (pair_p next, type_p type, const char *name, options_p opt,
 /* Create a fake field with the given type and name.  NEXT is the next
    field in the chain.  */
 #define create_field(next,type,name) \
-    create_field_all (next,type,name, 0, this_file, __LINE__)
+    create_field_all (next,type,name, 0, this_file, 0)
 
 /* Like create_field, but the field is only valid when condition COND
    is true.  */
@@ -1039,7 +1039,7 @@ create_optional_field_ (pair_p next, type_p type, const char *name,
 }
 
 #define create_optional_field(next,type,name,cond)	\
-       create_optional_field_(next,type,name,cond,__LINE__)
+       create_optional_field_(next,type,name,cond,0)
 
 /* Reverse a linked list of 'struct pair's in place.  */
 pair_p
@@ -5238,7 +5238,7 @@ main (int argc, char **argv)
       /* These types are set up with #define or else outside of where
          we can see them.  We should initialize them before calling
          read_input_list.  */
-#define POS_HERE(Call) do { pos.file = this_file; pos.line = __LINE__; \
+#define POS_HERE(Call) do { pos.file = this_file; pos.line = 0; \
 	Call;} while (0)
       POS_HERE (do_scalar_typedef ("CUMULATIVE_ARGS", &pos));
       POS_HERE (do_scalar_typedef ("REAL_VALUE_TYPE", &pos));
diff --git a/gcc/genmodes.cc b/gcc/genmodes.cc
index 59850bb070a..e187f8542a1 100644
--- a/gcc/genmodes.cc
+++ b/gcc/genmodes.cc
@@ -440,7 +440,7 @@ complete_all_modes (void)
 }
 
 /* For each mode in class CLASS, construct a corresponding complex mode.  */
-#define COMPLEX_MODES(C) make_complex_modes (MODE_##C, __FILE__, __LINE__)
+#define COMPLEX_MODES(C) make_complex_modes (MODE_##C, __FILE__, 0)
 static void
 make_complex_modes (enum mode_class cl,
 		    const char *file, unsigned int line)
@@ -499,7 +499,7 @@ make_complex_modes (enum mode_class cl,
    having as many components as necessary.  ORDER is the sorting order
    of the mode, with smaller numbers indicating a higher priority.  */
 #define VECTOR_MODES_WITH_PREFIX(PREFIX, C, W, ORDER) \
-  make_vector_modes (MODE_##C, #PREFIX, W, ORDER, __FILE__, __LINE__)
+  make_vector_modes (MODE_##C, #PREFIX, W, ORDER, __FILE__, 0)
 #define VECTOR_MODES(C, W) VECTOR_MODES_WITH_PREFIX (V, C, W, 0)
 static void ATTRIBUTE_UNUSED
 make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
@@ -552,7 +552,7 @@ make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width,
    BYTESIZE bytes in total.  */
 #define VECTOR_BOOL_MODE(NAME, COUNT, COMPONENT, BYTESIZE)		\
   make_vector_bool_mode (#NAME, COUNT, #COMPONENT, BYTESIZE,		\
-			 __FILE__, __LINE__)
+			 __FILE__, 0)
 static void ATTRIBUTE_UNUSED
 make_vector_bool_mode (const char *name, unsigned int count,
 		       const char *component, unsigned int bytesize,
@@ -574,7 +574,7 @@ make_vector_bool_mode (const char *name, unsigned int count,
 /* Input.  */
 
 #define _SPECIAL_MODE(C, N) \
-  make_special_mode (MODE_##C, #N, __FILE__, __LINE__)
+  make_special_mode (MODE_##C, #N, __FILE__, 0)
 #define RANDOM_MODE(N) _SPECIAL_MODE (RANDOM, N)
 #define CC_MODE(N) _SPECIAL_MODE (CC, N)
 
@@ -587,7 +587,7 @@ make_special_mode (enum mode_class cl, const char *name,
 
 #define INT_MODE(N, Y) FRACTIONAL_INT_MODE (N, -1U, Y)
 #define FRACTIONAL_INT_MODE(N, B, Y) \
-  make_int_mode (#N, B, Y, __FILE__, __LINE__)
+  make_int_mode (#N, B, Y, __FILE__, 0)
 
 static void
 make_int_mode (const char *name,
@@ -628,16 +628,16 @@ make_opaque_mode (const char *name,
 }
 
 #define FRACT_MODE(N, Y, F) \
-	make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, __LINE__)
+	make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, 0)
 
 #define UFRACT_MODE(N, Y, F) \
-	make_fixed_point_mode (MODE_UFRACT, #N, Y, 0, F, __FILE__, __LINE__)
+	make_fixed_point_mode (MODE_UFRACT, #N, Y, 0, F, __FILE__, 0)
 
 #define ACCUM_MODE(N, Y, I, F) \
-	make_fixed_point_mode (MODE_ACCUM, #N, Y, I, F, __FILE__, __LINE__)
+	make_fixed_point_mode (MODE_ACCUM, #N, Y, I, F, __FILE__, 0)
 
 #define UACCUM_MODE(N, Y, I, F) \
-	make_fixed_point_mode (MODE_UACCUM, #N, Y, I, F, __FILE__, __LINE__)
+	make_fixed_point_mode (MODE_UACCUM, #N, Y, I, F, __FILE__, 0)
 
 /* Create a fixed-point mode by setting CL, NAME, BYTESIZE, IBIT, FBIT,
    FILE, and LINE.  */
@@ -658,7 +658,7 @@ make_fixed_point_mode (enum mode_class cl,
 
 #define FLOAT_MODE(N, Y, F)             FRACTIONAL_FLOAT_MODE (N, -1U, Y, F)
 #define FRACTIONAL_FLOAT_MODE(N, B, Y, F) \
-  make_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
+  make_float_mode (#N, B, Y, #F, __FILE__, 0)
 
 static void
 make_float_mode (const char *name,
@@ -675,7 +675,7 @@ make_float_mode (const char *name,
 #define DECIMAL_FLOAT_MODE(N, Y, F)	\
 	FRACTIONAL_DECIMAL_FLOAT_MODE (N, -1U, Y, F)
 #define FRACTIONAL_DECIMAL_FLOAT_MODE(N, B, Y, F)	\
-  make_decimal_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
+  make_decimal_float_mode (#N, B, Y, #F, __FILE__, 0)
 
 static void
 make_decimal_float_mode (const char *name,
@@ -690,7 +690,7 @@ make_decimal_float_mode (const char *name,
 }
 
 #define RESET_FLOAT_FORMAT(N, F) \
-  reset_float_format (#N, #F, __FILE__, __LINE__)
+  reset_float_format (#N, #F, __FILE__, 0)
 static void ATTRIBUTE_UNUSED
 reset_float_format (const char *name, const char *format,
 		    const char *file, unsigned int line)
@@ -711,7 +711,7 @@ reset_float_format (const char *name, const char *format,
 
 /* __intN support.  */
 #define INT_N(M,PREC)				\
-  make_int_n (#M, PREC, __FILE__, __LINE__)
+  make_int_n (#M, PREC, __FILE__, 0)
 static void ATTRIBUTE_UNUSED
 make_int_n (const char *m, int bitsize,
             const char *file, unsigned int line)
@@ -740,7 +740,7 @@ make_int_n (const char *m, int bitsize,
 /* Partial integer modes are specified by relation to a full integer
    mode.  */
 #define PARTIAL_INT_MODE(M,PREC,NAME)				\
-  make_partial_integer_mode (#M, #NAME, PREC, __FILE__, __LINE__)
+  make_partial_integer_mode (#M, #NAME, PREC, __FILE__, 0)
 static void ATTRIBUTE_UNUSED
 make_partial_integer_mode (const char *base, const char *name,
 			   unsigned int precision,
@@ -767,7 +767,7 @@ make_partial_integer_mode (const char *base, const char *name,
 /* A single vector mode can be specified by naming its component
    mode and the number of components.  */
 #define VECTOR_MODE_WITH_PREFIX(PREFIX, C, M, N, ORDER) \
-  make_vector_mode (MODE_##C, #PREFIX, #M, N, ORDER, __FILE__, __LINE__);
+  make_vector_mode (MODE_##C, #PREFIX, #M, N, ORDER, __FILE__, 0);
 #define VECTOR_MODE(C, M, N) VECTOR_MODE_WITH_PREFIX(V, C, M, N, 0);
 static void ATTRIBUTE_UNUSED
 make_vector_mode (enum mode_class bclass,
@@ -814,7 +814,7 @@ make_vector_mode (enum mode_class bclass,
 
 /* Adjustability.  */
 #define _ADD_ADJUST(A, M, X, C1, C2) \
-  new_adjust (#M, &adj_##A, #A, #X, MODE_##C1, MODE_##C2, __FILE__, __LINE__)
+  new_adjust (#M, &adj_##A, #A, #X, MODE_##C1, MODE_##C2, __FILE__, 0)
 
 #define ADJUST_NUNITS(M, X)    _ADD_ADJUST (nunits, M, X, RANDOM, RANDOM)
 #define ADJUST_BYTESIZE(M, X)  _ADD_ADJUST (bytesize, M, X, RANDOM, RANDOM)
