[PPL-devel] [GIT] ppl/ppl(master): Ignore always unhandled bits.

Abramo Bagnara abramo.bagnara at gmail.com
Sat Apr 7 15:54:44 CEST 2012


Module: ppl/ppl
Branch: master
Commit: e4dbb6e73d34028361b3ae69cd7324318a0ff720
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=e4dbb6e73d34028361b3ae69cd7324318a0ff720

Author: Abramo Bagnara <abramo.bagnara at gmail.com>
Date:   Sat Apr  7 15:54:20 2012 +0200

Ignore always unhandled bits.

---

 src/Linear_Row.cc |   62 +++++++++++++++++++++++++++++------------------------
 1 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/src/Linear_Row.cc b/src/Linear_Row.cc
index a3646c4..86204ac 100644
--- a/src/Linear_Row.cc
+++ b/src/Linear_Row.cc
@@ -142,37 +142,35 @@ PPL::Linear_Row::all_homogeneous_terms_are_zero() const {
 namespace {
 
 // These are the keywords that indicate the individual assertions.
-const char* rpi_valid = "RPI_V";
-const char* is_rpi = "RPI";
-const char* nnc_valid = "NNC_V";
-const char* is_nnc = "NNC";
-const char* bit_names[] = {rpi_valid, is_rpi, nnc_valid, is_nnc};
+const char* rpi_valid_text = "RPI_V";
+const char* is_rpi_text = "RPI";
+const char* nnc_valid_text = "NNC_V";
+const char* is_nnc_text = "NNC";
+const char* bit_texts[] = {rpi_valid_text, is_rpi_text,
+                           nnc_valid_text, is_nnc_text};
 
 } // namespace
 
 void
 PPL::Linear_Row::Flags::ascii_dump(std::ostream& s) const {
-#ifndef NDEBUG
-  s << (test_bits(1U << Flags::rpi_validity_bit) ? '+' : '-')
-    << rpi_valid << ' ';
+  bool is_rpi = test_bits(1U << Flags::rpi_bit);
+  bool is_nnc = test_bits(1U << Flags::nnc_bit);
+  bool rpi_valid;
+  bool nnc_valid;
+#ifdef NDEBUG
+  // Dump unhandled bits always as true so to permit loading from a
+  // debug enabled executable without failing assertions.
+  rpi_valid = true;
+  nnc_valid = true;
 #else
-  // NOTE: dump the (unavailable) validity bit as set to avoid
-  // crashes when ascii_loading with assertions turned on.
-  s << '+' << rpi_valid << ' ';
+  rpi_valid = test_bits(1U << Flags::rpi_validity_bit);
+  nnc_valid = test_bits(1U << Flags::nnc_validity_bit);
 #endif
-  s << (test_bits(1U << Flags::rpi_bit) ? '+' : '-')
-    << is_rpi << ' '
-    << ' ';
-#ifndef NDEBUG
-  s << (test_bits(1U << Flags::nnc_validity_bit) ? '+' : '-')
-    << nnc_valid << ' ';
-#else
-  // NOTE: dump the (unavailable) validity bit as set to avoid
-  // crashes when ascii_loading with assertions turned on.
-  s << '+' << nnc_valid << ' ';
-#endif
-  s << (test_bits(1U << Flags::nnc_bit) ? '+' : '-')
-    << is_nnc;
+  s << (rpi_valid ? '+' : '-') << rpi_valid_text << ' '
+    << (is_rpi ? '+' : '-') << is_rpi_text << ' '
+    << ' '
+    << (nnc_valid ? '+' : '-') << nnc_valid_text << ' '
+    << (is_nnc ? '+' : '-') << is_nnc_text;
 }
 
 PPL_OUTPUT_DEFINITIONS_ASCII_ONLY(Linear_Row::Flags)
@@ -183,15 +181,23 @@ PPL::Linear_Row::Flags::ascii_load(std::istream& s) {
   // Assume that the bits are used in sequence.
   reset_bits(std::numeric_limits<base_type>::max());
   for (unsigned int bit = 0;
-       bit < (sizeof(bit_names) / sizeof(char*));
+       bit < (sizeof(bit_texts) / sizeof(char*));
        ++bit) {
     if (!(s >> str))
       return false;
-    if (str[0] == '+')
-      set_bits(1U << (Dense_Row::Flags::first_free_bit + bit));
+    if (str[0] == '+') {
+      bool load = true;
+#ifdef NDEBUG
+      // Do not load unhandled bits.
+      if (bit == rpi_validity_bit || bit == nnc_validity_bit)
+        load = false;
+#endif
+      if (load)
+        set_bits(1U << (Dense_Row::Flags::first_free_bit + bit));
+    }
     else if (str[0] != '-')
       return false;
-    if (str.compare(1, strlen(bit_names[bit]), bit_names[bit]) != 0)
+    if (str.compare(1, strlen(bit_texts[bit]), bit_texts[bit]) != 0)
       return false;
   }
   return true;




More information about the PPL-devel mailing list