]> git.gag.com Git - debian/gnuradio/commitdiff
Trial fix for ticket:258 / integer overflow undefined / phase
authoreb <eb@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 15 Aug 2008 01:12:02 +0000 (01:12 +0000)
committereb <eb@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 15 Aug 2008 01:12:02 +0000 (01:12 +0000)
accumulator.  Thanks to Stefan Bruens and Philip Ballister for working
on this.

According to the fine print in the C and C++ standards, if a signed
integer type overflows, the result is undefined.  As of gcc 4.3, gcc
was proving that our code was overflowing, and took advantage of the
"undefined" result to short circuit the evaluation.

Moral of the story:  if you're using a fixed point phase accumulator,
or anything else where you're counting on overflow happening, be sure
that your variable is unsigned.

See also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37067 and
http://www.airs.com/blog/archives/120

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@9296 221aa14e-8319-0410-a670-987f0aec2ac5

gnuradio-core/src/lib/general/gr_fxpt_nco.h

index 6487a5f4834a9061086f5d3f4ee36dc841c3bd97..ca0d54f024e4751caaae69a3e968d24110c6d403 100644 (file)
@@ -30,7 +30,7 @@
  * \ingroup misc
  */
 class gr_fxpt_nco {
-  gr_int32     d_phase;
+  gr_uint32    d_phase;
   gr_int32     d_phase_inc;
 
 public: