]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix undefined order of evaluation. 3714/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Tue, 27 Dec 2016 11:15:49 +0000 (04:15 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Tue, 27 Dec 2016 11:35:48 +0000 (04:35 -0700)
Within a sequence such as
  deallog << is1.n_elements() << ", " << is1.pop_front() << std::endl;
the order of calls to 'n_elements()' and 'pop_front()' is undefined. Consequently,
there are two possible correct output files.

Fix this by splitting the line into two complete statements, separated by
a semicolon (which implies a sequence point).

tests/base/index_set_25.cc
tests/base/index_set_25.output
tests/base/index_set_26.cc
tests/base/index_set_26.output

index 6f507a2febda8308dbef35ac266880a55a7d9d68..11cbca8f145a01cf0acd649fa64f58feba8a9a67 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2010 - 2015 by the deal.II authors
+// Copyright (C) 2010 - 2016 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -30,12 +30,21 @@ int main()
   is1.add_range(0, 2);
   is1.add_range(5,8);
 
-  deallog << is1.n_elements() << ", " << is1.pop_front() << std::endl;
-  deallog << is1.n_elements() << ", " << is1.pop_front() << std::endl;
-  deallog << is1.n_elements() << ", " << is1.pop_front() << std::endl;
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_front() << std::endl;
+
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_front() << std::endl;
+
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_front() << std::endl;
+
 
   is1.add_index(1);
 
-  deallog << is1.n_elements() << ", " << is1.pop_front() << std::endl;
-  deallog << is1.n_elements() << ", " << is1.pop_front() << std::endl;
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_front() << std::endl;
+
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_front() << std::endl;
 }
index 850d440266f5408c6d753c9b2b1a48173e3a8484..a61f41db58444c53e86a8c39e9dac18f019e21b1 100644 (file)
@@ -1,6 +1,6 @@
 
-DEAL::4, 0
+DEAL::5, 0
+DEAL::4, 1
+DEAL::3, 5
 DEAL::3, 1
-DEAL::2, 5
-DEAL::2, 1
-DEAL::1, 6
+DEAL::2, 6
index 528a4f3d4d063f0e616cf84e34871a03a7520e1b..bd47f535d49ceea6c2381b9456e27a76c5a7c44c 100644 (file)
@@ -1,6 +1,6 @@
 // ---------------------------------------------------------------------
 //
-// Copyright (C) 2010 - 2015 by the deal.II authors
+// Copyright (C) 2010 - 2016 by the deal.II authors
 //
 // This file is part of the deal.II library.
 //
@@ -30,12 +30,21 @@ int main()
   is1.add_range(0, 2);
   is1.add_range(5,8);
 
-  deallog << is1.n_elements() << ", " << is1.pop_back() << std::endl;
-  deallog << is1.n_elements() << ", " << is1.pop_back() << std::endl;
-  deallog << is1.n_elements() << ", " << is1.pop_back() << std::endl;
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_back() << std::endl;
+
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_back() << std::endl;
+
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_back() << std::endl;
+
 
   is1.add_index(9);
 
-  deallog << is1.n_elements() << ", " << is1.pop_back() << std::endl;
-  deallog << is1.n_elements() << ", " << is1.pop_back() << std::endl;
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_back() << std::endl;
+
+  deallog << is1.n_elements() << ", ";
+  deallog << is1.pop_back() << std::endl;
 }
index 1da81923f7a929058fba13c4515c960e1e77ea2a..596f0a482170672dc5cbfa03013daf4d59fa3251 100644 (file)
@@ -1,6 +1,6 @@
 
-DEAL::4, 7
-DEAL::3, 6
-DEAL::2, 5
-DEAL::2, 9
-DEAL::1, 1
+DEAL::5, 7
+DEAL::4, 6
+DEAL::3, 5
+DEAL::3, 9
+DEAL::2, 1

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.