I did replace all implicit casts to an int by a inline function, checking if
the value is valid, and then casting  to int.

Together with my previous patch now all but one compiler warnings are
solved.

 

Remark: I do not have git rights on the lilypond tree, so someone else
should merge those patches.

 

Jaap de Wolff

>From 8d1f6cd5e5b49b9754a77e93585867b4e9e1fb32 Mon Sep 17 00:00:00 2001
From: Jaap de Wolff <lilyp...@de-wolff.org>
Date: Sun, 10 May 2020 13:58:59 +0200
Subject: [PATCH 2/2] use explicit convert to int (with check)

---
 lily/break-substitution.cc   |  3 ++-
 lily/constrained-breaking.cc |  3 ++-
 lily/include/misc.hh         | 19 +++++++++++++++++++
 lily/performance.cc          |  5 +++--
 lily/quote-iterator.cc       |  3 ++-
 lily/source-file.cc          |  2 +-
 lily/system.cc               |  3 ++-
 7 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc
index 3eb3741b1f..a44ac55318 100644
--- a/lily/break-substitution.cc
+++ b/lily/break-substitution.cc
@@ -18,6 +18,7 @@
 */
 
 #include "item.hh"
+#include "misc.hh"
 #include "system.hh"
 #include "grob-array.hh"
 
@@ -306,7 +307,7 @@ bool
 Spanner::fast_substitute_grob_array (SCM sym,
                                      Grob_array *grob_array)
 {
-  int len = grob_array->size ();
+  int len = unsigned_to_int(grob_array->size ());
 
   if (grob_array->ordered ())
     return false;
diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc
index 7d5b37dd1a..8a87a508b2 100644
--- a/lily/constrained-breaking.cc
+++ b/lily/constrained-breaking.cc
@@ -21,6 +21,7 @@
 
 #include "international.hh"
 #include "main.hh"
+#include "misc.hh"
 #include "output-def.hh"
 #include "page-layout-problem.hh"
 #include "paper-column.hh"
@@ -132,7 +133,7 @@ Constrained_breaking::space_line (vsize i, vsize j)
   // get_line_configuration().  What is the real cost?
   vector<Paper_column *> const line (all_.begin () + breaks_[i],
                                      all_.begin () + breaks_[j] + 1);
-  Interval line_dims = line_dimensions_int (pscore_->layout (), i);
+  Interval line_dims = line_dimensions_int (pscore_->layout (), 
unsigned_to_int (i));
   bool last = j == breaks_.size () - 1;
   bool ragged = ragged_right || (last && ragged_last);
 
diff --git a/lily/include/misc.hh b/lily/include/misc.hh
index 5c9d24b9ed..e186cead7b 100644
--- a/lily/include/misc.hh
+++ b/lily/include/misc.hh
@@ -24,6 +24,7 @@
 
 #include "std-vector.hh"
 #include "interval.hh"
+#include "warn.hh"
 
 double log_2 (double x);
 
@@ -66,6 +67,24 @@ shift_left (int value, int shiftamount)
   else return (value << shiftamount);
 }
 
+template <class T>
+int
+signed_to_int (T value)
+{
+  if ((value > INT_MAX) || (value < INT_MIN))
+    error ("signed_to_int with out of bound value: " + std::to_string (value));
+  return ((int) value);
+}
+
+template <class T>
+int
+unsigned_to_int (T value)
+{
+  if (value > INT_MAX)
+    error ("unsigned_to_int with out of bound value: " + std::to_string 
(value));
+  return ((int) value);
+}
+
 inline Real
 linear_interpolate (Real x, Real x1, Real x2, Real y1, Real y2)
 {
diff --git a/lily/performance.cc b/lily/performance.cc
index 2c37dea2b5..462537fcbe 100644
--- a/lily/performance.cc
+++ b/lily/performance.cc
@@ -28,6 +28,7 @@
 #include "main.hh"
 #include "midi-chunk.hh"
 #include "midi-stream.hh"
+#include "misc.hh"
 #include "output-def.hh"
 #include "score.hh"
 #include "string-convert.hh"
@@ -66,7 +67,7 @@ void
 Performance::output (Midi_stream &midi_stream,
                      const string &performance_name) const
 {
-  int tracks_ = audio_staffs_.size ();
+  int tracks_ = unsigned_to_int(audio_staffs_.size ());
 
   midi_stream.write (Midi_header (1, tracks_, 384));
   debug_output (_ ("Track...") + " ", false);
@@ -97,7 +98,7 @@ Performance::output (Midi_stream &midi_stream,
           text->text_string_ = performance_name;
         }
       debug_output ("[" + std::to_string (i), true);
-      s->output (midi_stream, i, ports_, start_mom);
+      s->output (midi_stream, unsigned_to_int(i), ports_, start_mom);
       debug_output ("]", false);
     }
 }
diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc
index c1636ba05d..e8483ae233 100644
--- a/lily/quote-iterator.cc
+++ b/lily/quote-iterator.cc
@@ -24,6 +24,7 @@
 #include "input.hh"
 #include "international.hh"
 #include "lily-guile.hh"
+#include "misc.hh"
 #include "music-sequence.hh"
 #include "music.hh"
 #include "warn.hh"
@@ -101,7 +102,7 @@ int
 binsearch_scm_vector (SCM vec, SCM key, bool (*is_less) (SCM a, SCM b))
 {
   int lo = 0;
-  int hi = scm_c_vector_length (vec);
+  int hi = unsigned_to_int(scm_c_vector_length (vec));
 
   /* binary search */
   do
diff --git a/lily/source-file.cc b/lily/source-file.cc
index abee8cf10c..5a8cbbe005 100644
--- a/lily/source-file.cc
+++ b/lily/source-file.cc
@@ -221,7 +221,7 @@ Source_file::line_slice (char const *pos_str0) const
         break;
       }
 
-  return Slice (begin_str0 - data_str0, end_str0 - data_str0);
+  return Slice (signed_to_int(begin_str0 - data_str0), signed_to_int(end_str0 
- data_str0));
 }
 
 string
diff --git a/lily/system.cc b/lily/system.cc
index 0fcf103ef7..58afd05f62 100644
--- a/lily/system.cc
+++ b/lily/system.cc
@@ -39,6 +39,7 @@
 #include "system-start-delimiter.hh"
 #include "text-interface.hh"
 #include "warn.hh"
+#include "misc.hh"
 #include "unpure-pure-container.hh"
 #include "lily-imports.hh"
 
@@ -510,7 +511,7 @@ System::add_column (Paper_column *p)
       ga = unsmob<Grob_array> (scm_ga);
     }
 
-  p->set_rank (ga->size ());
+  p->set_rank (unsigned_to_int(ga->size ()));
 
   ga->add (p);
   Axis_group_interface::add_element (this, p);
-- 
2.20.1

Reply via email to