Third pass at fixing warnings:

- added very stringent checks when compiling under clang; for now, there will still be warnings,
  since I haven't addressed the specific code yet (probably issues in OSX too)
- no issues when compiling with gcc; still need to check VS.
This commit is contained in:
Stephen Anthony 2017-10-11 21:49:31 -02:30
parent be48e643e6
commit 10bdcd58d2
17 changed files with 87 additions and 69 deletions

View File

@ -53,6 +53,13 @@ CXXFLAGS+= -Wall -Wextra -Wno-unused-parameter -Wno-ignored-qualifiers
ifdef HAVE_GCC ifdef HAVE_GCC
CXXFLAGS+= -Wno-multichar -Wunused -fno-rtti -Woverloaded-virtual -Wnon-virtual-dtor -std=c++14 CXXFLAGS+= -Wno-multichar -Wunused -fno-rtti -Woverloaded-virtual -Wnon-virtual-dtor -std=c++14
endif endif
ifdef HAVE_CLANG
CXXFLAGS+= -Weverything -Wno-c++17-extensions -Wno-c++98-compat -Wno-c++98-compat-pedantic \
-Wno-double-promotion -Wno-switch-enum -Wno-conversion \
-Wno-inconsistent-missing-destructor-override \
-Wno-exit-time-destructors -Wno-global-constructors -Wno-weak-vtables \
-Wno-four-char-constants -Wno-padded
endif
ifdef PROFILE ifdef PROFILE
PROF:= -g -pg -fprofile-arcs -ftest-coverage PROF:= -g -pg -fprofile-arcs -ftest-coverage
@ -63,10 +70,6 @@ else
endif endif
endif endif
# Even more warnings...
#CXXFLAGS+= -pedantic -Wpointer-arith -Wcast-qual -Wconversion
#CXXFLAGS+= -Wshadow -Wimplicit -Wundef -Wnon-virtual-dtor
#CXXFLAGS+= -Wno-reorder -Wwrite-strings -fcheck-new -Wctor-dtor-privacy
####################################################################### #######################################################################
# Misc stuff - you should never have to edit this # # Misc stuff - you should never have to edit this #

45
configure vendored
View File

@ -386,14 +386,16 @@ cc_check_define __GNUC__ && have_gcc=yes
if test "$have_clang" = yes; then if test "$have_clang" = yes; then
clang_minor=$( $CXX -dM -E -x c /dev/null | grep __clang_minor__ | sed 's/.*\([0-9][0-9]*\).*/\1/' )
clang_patch=$( $CXX -dM -E -x c /dev/null | grep __clang_patchlevel__ | sed 's/.*\([0-9][0-9]*\).*/\1/' )
clang_major=$( $CXX -dM -E -x c /dev/null | grep __clang_major__ | sed 's/.*\([0-9][0-9]*\).*/\1/' )
cxx_version="$clang_major.$clang_minor.$clang_patch"
is_xcode=$( $CXX -dM -E -x c /dev/null | grep __apple_build_version__ ) is_xcode=$( $CXX -dM -E -x c /dev/null | grep __apple_build_version__ )
# Need at least version 8
if test -n "$is_xcode"; then if test -n "$is_xcode"; then
clang_minor=$( $CXX -dM -E -x c /dev/null | grep __clang_minor__ | sed 's/.*\([0-9][0-9]*\).*/\1/' )
clang_patch=$( $CXX -dM -E -x c /dev/null | grep __clang_patchlevel__ | sed 's/.*\([0-9][0-9]*\).*/\1/' )
clang_major=$( $CXX -dM -E -x c /dev/null | grep __clang_major__ | sed 's/.*\([0-9][0-9]*\).*/\1/' )
cxx_version="$clang_major.$clang_minor.$clang_patch"
cxx_name="XCode $cxx_version" cxx_name="XCode $cxx_version"
if test $clang_major -ge 8; then if test $clang_major -ge 8; then
@ -401,35 +403,23 @@ if test "$have_clang" = yes; then
cxx_verc_fail=no cxx_verc_fail=no
else else
cxx_version="$cxx_version, bad" cxx_version="$cxx_version, bad"
cxx_verc_fail=bad cxx_verc_fail=yes
fi fi
else else
cxx_name=`( $cc -v ) 2>&1 | tail -n 1 | cut -d ' ' -f 1` # Need at least version 3.5
cxx_version=$( $CXX -dM -E -x c /dev/null | grep __clang_version__ | sed 's/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/g' 2>&1) if [ $clang_major -ge 4 ] || [ $clang_major -eq 3 -a $clang_minor -ge 5 ]; then
if test "$?" -gt 0; then cxx_version="$cxx_version, ok"
cxx_version="not found" cxx_verc_fail=no
else
cxx_version="$cxx_version, bad"
cxx_verc_fail=yes
fi fi
case $cxx_version in
[3].[4-9]|[3].[4-9].[0-9]|[3].[4-9].[0-9][-.]*|[4-9].[0-9].[0-9])
_cxx_major=`echo $cxx_version | cut -d '.' -f 1`
_cxx_minor=`echo $cxx_version | cut -d '.' -f 2`
cxx_version="$cxx_version, ok"
cxx_verc_fail=no
;;
'not found')
cxx_verc_fail=yes
;;
*)
cxx_version="$cxx_version, bad"
cxx_verc_fail=yes
;;
esac
fi fi
CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS"
_make_def_HAVE_GCC3='HAVE_GCC3 = 1' _make_def_HAVE_GCC3='HAVE_GCC3 = 1'
add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP'
_make_def_HAVE_GCC='HAVE_GCC = 1' _make_def_HAVE_GCC='HAVE_GCC = 1'
_make_def_HAVE_CLANG='HAVE_CLANG = 1'
echo "$cxx_version" echo "$cxx_version"
elif test "$have_gcc" = yes; then elif test "$have_gcc" = yes; then
@ -505,7 +495,7 @@ fi
if test "$cxx_verc_fail" = yes ; then if test "$cxx_verc_fail" = yes ; then
echo echo
echo "The version of your compiler is not supported at this time" echo "The version of your compiler is not supported at this time"
echo "Please ensure you are using GCC 4.7 / Clang 3.4 or above" echo "Please ensure you are using GCC 5.0 / Clang 3.8 or above"
exit 1 exit 1
fi fi
@ -826,6 +816,7 @@ PROFILE := $_build_profile
$_make_def_HAVE_GCC $_make_def_HAVE_GCC
$_make_def_HAVE_GCC3 $_make_def_HAVE_GCC3
$_make_def_HAVE_CLANG
INCLUDES += $INCLUDES INCLUDES += $INCLUDES
OBJS += $OBJS OBJS += $OBJS

View File

@ -98,6 +98,7 @@ class Base
// Format specifiers to use for sprintf (eventually we may convert // Format specifiers to use for sprintf (eventually we may convert
// to C++ streams // to C++ streams
static ostringstream buf;
static const char* const myLowerFmt[4]; static const char* const myLowerFmt[4];
static const char* const myUpperFmt[4]; static const char* const myUpperFmt[4];
static const char* const* myFmt; static const char* const* myFmt;

View File

@ -24,8 +24,10 @@
*/ */
#ifdef __clang__ #ifdef __clang__
#pragma clang diagnostic push #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
#pragma clang diagnostic ignored "-Wdocumentation" #pragma clang diagnostic ignored "-Wdocumentation"
#pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
#pragma clang diagnostic ignored "-Wreserved-id-macro"
#include <SDL.h> #include <SDL.h>
#pragma clang diagnostic pop #pragma clang diagnostic pop
#else #else

View File

@ -50,7 +50,7 @@ class StringParser
@param str The string to split @param str The string to split
@param maxlen The maximum length of string to generate @param maxlen The maximum length of string to generate
*/ */
StringParser(const string& str, uInt16 maxlen) StringParser(const string& str, uInt32 maxlen)
{ {
istringstream buf(str); istringstream buf(str);
string line; string line;

View File

@ -22,7 +22,7 @@
This file defines various basic data types and preprocessor variables This file defines various basic data types and preprocessor variables
that need to be defined for different operating systems. that need to be defined for different operating systems.
@author Bradford W. Mott @author Bradford W. Mott and Stephen Anthony
*/ */
#include <cstdint> #include <cstdint>
@ -77,6 +77,7 @@ using std::memcpy;
using IntArray = std::vector<Int32>; using IntArray = std::vector<Int32>;
using BoolArray = std::vector<bool>; using BoolArray = std::vector<bool>;
using ByteArray = std::vector<uInt8>; using ByteArray = std::vector<uInt8>;
using ShortArray = std::vector<uInt16>;
using StringList = std::vector<std::string>; using StringList = std::vector<std::string>;
using BytePtr = std::unique_ptr<uInt8[]>; using BytePtr = std::unique_ptr<uInt8[]>;
@ -87,12 +88,14 @@ namespace BSPF
// Defines to help with path handling // Defines to help with path handling
#if defined(BSPF_UNIX) || defined(BSPF_MAC_OSX) #if defined(BSPF_UNIX) || defined(BSPF_MAC_OSX)
static const string PATH_SEPARATOR = "/"; static const string PATH_SEPARATOR = "/";
#define ATTRIBUTE_FMT_PRINTF __attribute__((__format__ (__printf__, 2, 0)))
#elif defined(BSPF_WINDOWS) #elif defined(BSPF_WINDOWS)
static const string PATH_SEPARATOR = "\\"; static const string PATH_SEPARATOR = "\\";
#pragma warning (disable : 4146) // unary minus operator applied to unsigned type #pragma warning (disable : 4146) // unary minus operator applied to unsigned type
#pragma warning(2:4264) // no override available for virtual member function from base 'class'; function is hidden #pragma warning(2:4264) // no override available for virtual member function from base 'class'; function is hidden
#pragma warning(2:4265) // class has virtual functions, but destructor is not virtual #pragma warning(2:4265) // class has virtual functions, but destructor is not virtual
#pragma warning(2:4266) // no override available for virtual member function from base 'type'; function is hidden #pragma warning(2:4266) // no override available for virtual member function from base 'type'; function is hidden
#define ATTRIBUTE_FMT_PRINTF
#else #else
#error Update src/common/bspf.hxx for path separator #error Update src/common/bspf.hxx for path separator
#endif #endif
@ -164,13 +167,13 @@ namespace BSPF
// Find location (if any) of the second string within the first, // Find location (if any) of the second string within the first,
// starting from 'startpos' in the first string // starting from 'startpos' in the first string
inline size_t findIgnoreCase(const string& s1, const string& s2, int startpos = 0) inline size_t findIgnoreCase(const string& s1, const string& s2, size_t startpos = 0)
{ {
auto pos = std::search(s1.cbegin()+startpos, s1.cend(), auto pos = std::search(s1.cbegin()+startpos, s1.cend(),
s2.cbegin(), s2.cend(), [](char ch1, char ch2) { s2.cbegin(), s2.cend(), [](char ch1, char ch2) {
return toupper(uInt8(ch1)) == toupper(uInt8(ch2)); return toupper(uInt8(ch1)) == toupper(uInt8(ch2));
}); });
return pos == s1.cend() ? string::npos : size_t(pos - (s1.cbegin()+startpos)); return pos == s1.cend() ? string::npos : pos - (s1.cbegin()+startpos);
} }
// Test whether the first string ends with the second one (case insensitive) // Test whether the first string ends with the second one (case insensitive)

View File

@ -58,7 +58,7 @@ CartDebug::CartDebug(Debugger& dbg, Console& console, const OSystem& osystem)
mySystemAddresses = LabelToAddr(sysCmp); mySystemAddresses = LabelToAddr(sysCmp);
// Add Zero-page RAM addresses // Add Zero-page RAM addresses
for(uInt32 i = 0x80; i <= 0xFF; ++i) for(uInt16 i = 0x80; i <= 0xFF; ++i)
{ {
myState.rport.push_back(i); myState.rport.push_back(i);
myState.wport.push_back(i); myState.wport.push_back(i);
@ -75,14 +75,15 @@ CartDebug::CartDebug(Debugger& dbg, Console& console, const OSystem& osystem)
BankInfo info; BankInfo info;
info.size = std::min(banksize, 4096u); info.size = std::min(banksize, 4096u);
for(int i = 0; i < myConsole.cartridge().bankCount(); ++i) for(uInt32 i = 0; i < myConsole.cartridge().bankCount(); ++i)
myBankInfo.push_back(info); myBankInfo.push_back(info);
info.size = 128; // ZP RAM info.size = 128; // ZP RAM
myBankInfo.push_back(info); myBankInfo.push_back(info);
// We know the address for the startup bank right now // We know the address for the startup bank right now
myBankInfo[myConsole.cartridge().startBank()].addressList.push_front(myDebugger.dpeek(0xfffc)); myBankInfo[myConsole.cartridge().startBank()].addressList.push_front(
myDebugger.dpeek(0xfffc));
addLabel("Start", myDebugger.dpeek(0xfffc, DATA)); addLabel("Start", myDebugger.dpeek(0xfffc, DATA));
// Add system equates // Add system equates
@ -132,7 +133,7 @@ const DebuggerState& CartDebug::getState()
{ {
myState.ram.clear(); myState.ram.clear();
for(uInt32 i = 0; i < myState.rport.size(); ++i) for(uInt32 i = 0; i < myState.rport.size(); ++i)
myState.ram.push_back(peek(myState.rport[i])); myState.ram.push_back(myDebugger.peek(myState.rport[i]));
if(myDebugWidget) if(myDebugWidget)
myState.bank = myDebugWidget->bankState(); myState.bank = myDebugWidget->bankState();
@ -145,7 +146,7 @@ void CartDebug::saveOldState()
{ {
myOldState.ram.clear(); myOldState.ram.clear();
for(uInt32 i = 0; i < myOldState.rport.size(); ++i) for(uInt32 i = 0; i < myOldState.rport.size(); ++i)
myOldState.ram.push_back(peek(myOldState.rport[i])); myOldState.ram.push_back(myDebugger.peek(myOldState.rport[i]));
if(myDebugWidget) if(myDebugWidget)
{ {
@ -1333,7 +1334,7 @@ void CartDebug::getBankDirectives(ostream& buf, BankInfo& info) const
buf << "ORG " << Base::HEX4 << info.offset << endl; buf << "ORG " << Base::HEX4 << info.offset << endl;
// Now consider each byte // Now consider each byte
uInt32 prev = info.offset, addr = prev + 1; uInt16 prev = info.offset, addr = prev + 1;
DisasmType prevType = disasmTypeAbsolute(mySystem.getAccessFlags(prev)); DisasmType prevType = disasmTypeAbsolute(mySystem.getAccessFlags(prev));
for( ; addr < info.offset + info.size; ++addr) for( ; addr < info.offset + info.size; ++addr)
{ {

View File

@ -39,10 +39,10 @@ using CartMethod = int (CartDebug::*)();
class CartState : public DebuggerState class CartState : public DebuggerState
{ {
public: public:
ByteArray ram; // The actual data values ByteArray ram; // The actual data values
IntArray rport; // Address for reading from RAM ShortArray rport; // Address for reading from RAM
IntArray wport; // Address for writing to RAM ShortArray wport; // Address for writing to RAM
string bank; // Current banking layout string bank; // Current banking layout
}; };
class CartDebug : public DebuggerSystem class CartDebug : public DebuggerSystem
@ -113,13 +113,6 @@ class CartDebug : public DebuggerSystem
CartDebugWidget* getDebugWidget() const { return myDebugWidget; } CartDebugWidget* getDebugWidget() const { return myDebugWidget; }
void setDebugWidget(CartDebugWidget* w) { myDebugWidget = w; } void setDebugWidget(CartDebugWidget* w) { myDebugWidget = w; }
// The following assume that the given addresses are using the
// correct read/write port ranges; no checking will be done to
// confirm this.
uInt8 peek(uInt16 addr) { return mySystem.peek(addr); }
uInt16 dpeek(uInt16 addr) { return mySystem.peek(addr) | (mySystem.peek(addr+1) << 8); }
void poke(uInt16 addr, uInt8 value) { mySystem.poke(addr, value); }
// Indicate that a read from write port has occurred at the specified // Indicate that a read from write port has occurred at the specified
// address. // address.
void triggerReadFromWritePort(uInt16 address); void triggerReadFromWritePort(uInt16 address);
@ -295,7 +288,7 @@ class CartDebug : public DebuggerSystem
uInt16 start; // start of address space uInt16 start; // start of address space
uInt16 end; // end of address space uInt16 end; // end of address space
uInt16 offset; // ORG value uInt16 offset; // ORG value
uInt16 size; // size of a bank (in bytes) uInt32 size; // size of a bank (in bytes)
AddressList addressList; // addresses which PC has hit AddressList addressList; // addresses which PC has hit
DirectiveList directiveList; // overrides for automatic code determination DirectiveList directiveList; // overrides for automatic code determination

View File

@ -169,9 +169,9 @@ class Debugger : public DialogContainer
static uInt8 set_bit(uInt8 input, uInt8 bit, bool on) static uInt8 set_bit(uInt8 input, uInt8 bit, bool on)
{ {
if(on) if(on)
return input | (1 << bit); return uInt8(input | (1 << bit));
else else
return input & ~(1 << bit); return uInt8(input & ~(1 << bit));
} }
static void set_bits(uInt8 reg, BoolArray& bits) static void set_bits(uInt8 reg, BoolArray& bits)
{ {
@ -193,7 +193,7 @@ class Debugger : public DialogContainer
return result; return result;
} }
/* Invert given input if it differs from its previous value */ /** Invert given input if it differs from its previous value */
const string invIfChanged(int reg, int oldReg); const string invIfChanged(int reg, int oldReg);
/** /**
@ -206,9 +206,25 @@ class Debugger : public DialogContainer
*/ */
static Debugger& debugger() { return *myStaticDebugger; } static Debugger& debugger() { return *myStaticDebugger; }
/* These are now exposed so Expressions can use them. */ /** Convenience methods to access peek/poke from System */
int peek(int addr, uInt8 flags = 0) { return mySystem.peek(addr, flags); } uInt8 peek(uInt16 addr, uInt8 flags = 0) {
int dpeek(int addr, uInt8 flags = 0) { return mySystem.peek(addr, flags) | (mySystem.peek(addr+1, flags) << 8); } return mySystem.peek(addr, flags);
}
uInt16 dpeek(uInt16 addr, uInt8 flags = 0) {
return uInt16(mySystem.peek(addr, flags) | (mySystem.peek(addr+1, flags) << 8));
}
void poke(uInt16 addr, uInt8 value, uInt8 flags = 0) {
mySystem.poke(addr, value, flags);
}
/** These are now exposed so Expressions can use them. */
int peekAsInt(int addr, uInt8 flags = 0) {
return mySystem.peek(uInt16(addr), flags);
}
int dpeekAsInt(int addr, uInt8 flags = 0) {
return mySystem.peek(uInt16(addr), flags) |
(mySystem.peek(uInt16(addr+1), flags) << 8);
}
int getAccessFlags(uInt16 addr) const int getAccessFlags(uInt16 addr) const
{ return mySystem.getAccessFlags(addr); } { return mySystem.getAccessFlags(addr); }
void setAccessFlags(uInt16 addr, uInt8 flags) void setAccessFlags(uInt16 addr, uInt8 flags)

View File

@ -337,7 +337,7 @@ class WordDerefExpression : public Expression
public: public:
WordDerefExpression(Expression* left) : Expression(left) { } WordDerefExpression(Expression* left) : Expression(left) { }
Int32 evaluate() const override Int32 evaluate() const override
{ return Debugger::debugger().dpeek(myLHS->evaluate()); } { return Debugger::debugger().dpeekAsInt(myLHS->evaluate()); }
}; };
#endif #endif

View File

@ -36,7 +36,7 @@ Cartridge0840Widget::Cartridge0840Widget(
for(uInt32 i = 0, offset = 0xFFC, spot = 0x800; i < 2; for(uInt32 i = 0, offset = 0xFFC, spot = 0x800; i < 2;
++i, offset += 0x1000, spot += 0x40) ++i, offset += 0x1000, spot += 0x40)
{ {
uInt16 start = (cart.myImage[offset+1] << 8) | cart.myImage[offset]; uInt16 start = uInt16((cart.myImage[offset+1] << 8) | cart.myImage[offset]);
start -= start % 0x1000; start -= start % 0x1000;
info << "Bank " << i << " @ $" << Common::Base::HEX4 << start << " - " info << "Bank " << i << " @ $" << Common::Base::HEX4 << start << " - "
<< "$" << (start + 0xFFF) << " (hotspot = $" << spot << ")\n"; << "$" << (start + 0xFFF) << " (hotspot = $" << spot << ")\n";

View File

@ -35,8 +35,8 @@ class PromptWidget : public Widget, public CommandSender
virtual ~PromptWidget() = default; virtual ~PromptWidget() = default;
public: public:
int printf(const char* format, ...); ATTRIBUTE_FMT_PRINTF int printf(const char* format, ...);
int vprintf(const char* format, va_list argptr); ATTRIBUTE_FMT_PRINTF int vprintf(const char* format, va_list argptr);
void print(const string& str); void print(const string& str);
void printPrompt(); void printPrompt();
bool saveBuffer(const FilesystemNode& file); bool saveBuffer(const FilesystemNode& file);

View File

@ -32,14 +32,14 @@ RiotRamWidget::RiotRamWidget(GuiObject* boss, const GUI::Font& lfont,
uInt8 RiotRamWidget::getValue(int addr) const uInt8 RiotRamWidget::getValue(int addr) const
{ {
const CartState& state = static_cast<const CartState&>(myDbg.getState()); const CartState& state = static_cast<const CartState&>(myDbg.getState());
return myDbg.peek(state.rport[addr]); return instance().debugger().peek(state.rport[addr]);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RiotRamWidget::setValue(int addr, uInt8 value) void RiotRamWidget::setValue(int addr, uInt8 value)
{ {
const CartState& state = static_cast<const CartState&>(myDbg.getState()); const CartState& state = static_cast<const CartState&>(myDbg.getState());
myDbg.poke(state.wport[addr], value); instance().debugger().poke(state.wport[addr], value);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -27,6 +27,13 @@
#ifndef THUMBULATOR_HXX #ifndef THUMBULATOR_HXX
#define THUMBULATOR_HXX #define THUMBULATOR_HXX
// FIXME - This code has many instances of shifting into signed integers
// Perhaps the int's should be changed to uInt32
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshift-sign-overflow"
#endif
#include "bspf.hxx" #include "bspf.hxx"
#include "Cart.hxx" #include "Cart.hxx"
#include "Console.hxx" #include "Console.hxx"

View File

@ -237,7 +237,7 @@ void FrameManager::setState(FrameManager::State state)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameManager::finalizeFrame() void FrameManager::finalizeFrame()
{ {
if (myCurrentFrameTotalLines != (uInt32)myStableFrameLines) { if (myCurrentFrameTotalLines != uInt32(myStableFrameLines)) {
if (myCurrentFrameTotalLines == myCurrentFrameFinalLines) { if (myCurrentFrameTotalLines == myCurrentFrameFinalLines) {
if (++myStableFrameHeightCountdown >= Metrics::framesForStableHeight) { if (++myStableFrameHeightCountdown >= Metrics::framesForStableHeight) {
@ -273,7 +273,7 @@ void FrameManager::finalizeFrame()
void FrameManager::handleJitter(Int32 scanlineDifference) void FrameManager::handleJitter(Int32 scanlineDifference)
{ {
if ( if (
(uInt32)abs(scanlineDifference) < Metrics::minDeltaForJitter || uInt32(abs(scanlineDifference)) < Metrics::minDeltaForJitter ||
!myJitterEnabled || !myJitterEnabled ||
myTotalFrames < Metrics::initialGarbageFrames myTotalFrames < Metrics::initialGarbageFrames
) return; ) return;

View File

@ -69,7 +69,7 @@ void PaddleReader::update(double value, double timestamp, ConsoleTiming consoleT
setConsoleTiming(consoleTiming); setConsoleTiming(consoleTiming);
} }
if (value != myValue) { if (value != myValue) { // FIXME - warning on 'no-float-equal'
myValue = value; myValue = value;
if (myValue < 0) { if (myValue < 0) {

View File

@ -32,6 +32,7 @@ void yyerror(const char* e);
#ifdef __clang__ #ifdef __clang__
#pragma clang diagnostic push #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wold-style-cast"
#pragma clang diagnostic ignored "-Wimplicit-fallthrough" #pragma clang diagnostic ignored "-Wimplicit-fallthrough"
#pragma clang diagnostic ignored "-Wmissing-variable-declarations" #pragma clang diagnostic ignored "-Wmissing-variable-declarations"
#include "y.tab.c" #include "y.tab.c"