gui/platforms.h: renamed `Platform` to `PlatformData` / Platform: removed unnecessary `cppcheck` namespace (#5545)
This commit is contained in:
parent
579938a6ff
commit
ebb877adcc
|
@ -618,9 +618,9 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[])
|
|||
// these are loaded via external files and thus have Settings::PlatformFile set instead.
|
||||
// override the type so they behave like the regular platforms.
|
||||
if (platform == "unix32-unsigned")
|
||||
mSettings.platform.type = cppcheck::Platform::Type::Unix32;
|
||||
mSettings.platform.type = Platform::Type::Unix32;
|
||||
else if (platform == "unix64-unsigned")
|
||||
mSettings.platform.type = cppcheck::Platform::Type::Unix64;
|
||||
mSettings.platform.type = Platform::Type::Unix64;
|
||||
}
|
||||
|
||||
// Write results in results.plist
|
||||
|
|
|
@ -243,7 +243,7 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) :
|
|||
mUI->mActionEditProjectFile->setEnabled(mProjectFile != nullptr);
|
||||
|
||||
for (int i = 0; i < mPlatforms.getCount(); i++) {
|
||||
Platform platform = mPlatforms.mPlatforms[i];
|
||||
PlatformData platform = mPlatforms.mPlatforms[i];
|
||||
QAction *action = new QAction(this);
|
||||
platform.mActMainWindow = action;
|
||||
mPlatforms.mPlatforms[i] = platform;
|
||||
|
@ -274,11 +274,11 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) :
|
|||
// For other platforms default to unspecified/default which means the
|
||||
// platform Cppcheck GUI was compiled on.
|
||||
#if defined(_WIN32)
|
||||
const cppcheck::Platform::Type defaultPlatform = cppcheck::Platform::Type::Win32W;
|
||||
const Platform::Type defaultPlatform = Platform::Type::Win32W;
|
||||
#else
|
||||
const cppcheck::Platform::Type defaultPlatform = cppcheck::Platform::Type::Unspecified;
|
||||
const Platform::Type defaultPlatform = Platform::Type::Unspecified;
|
||||
#endif
|
||||
Platform &platform = mPlatforms.get((cppcheck::Platform::Type)mSettings->value(SETTINGS_CHECKED_PLATFORM, defaultPlatform).toInt());
|
||||
PlatformData &platform = mPlatforms.get((Platform::Type)mSettings->value(SETTINGS_CHECKED_PLATFORM, defaultPlatform).toInt());
|
||||
platform.mActMainWindow->setChecked(true);
|
||||
|
||||
mNetworkAccessManager = new QNetworkAccessManager(this);
|
||||
|
@ -494,7 +494,7 @@ void MainWindow::doAnalyzeProject(ImportProject p, const bool checkLibrary, cons
|
|||
p.ignorePaths(v);
|
||||
|
||||
if (!mProjectFile->getAnalyzeAllVsConfigs()) {
|
||||
const cppcheck::Platform::Type platform = (cppcheck::Platform::Type) mSettings->value(SETTINGS_CHECKED_PLATFORM, 0).toInt();
|
||||
const Platform::Type platform = (Platform::Type) mSettings->value(SETTINGS_CHECKED_PLATFORM, 0).toInt();
|
||||
std::vector<std::string> configurations;
|
||||
const QStringList configs = mProjectFile->getVsConfigurations();
|
||||
std::transform(configs.cbegin(), configs.cend(), std::back_inserter(configurations), [](const QString& e) {
|
||||
|
@ -967,9 +967,9 @@ Settings MainWindow::getCppcheckSettings()
|
|||
const QString applicationFilePath = QCoreApplication::applicationFilePath();
|
||||
result.platform.loadFromFile(applicationFilePath.toStdString().c_str(), platform.toStdString());
|
||||
} else {
|
||||
for (int i = cppcheck::Platform::Type::Native; i <= cppcheck::Platform::Type::Unix64; i++) {
|
||||
const cppcheck::Platform::Type p = (cppcheck::Platform::Type)i;
|
||||
if (platform == cppcheck::Platform::toString(p)) {
|
||||
for (int i = Platform::Type::Native; i <= Platform::Type::Unix64; i++) {
|
||||
const Platform::Type p = (Platform::Type)i;
|
||||
if (platform == Platform::toString(p)) {
|
||||
result.platform.set(p);
|
||||
break;
|
||||
}
|
||||
|
@ -1060,8 +1060,8 @@ Settings MainWindow::getCppcheckSettings()
|
|||
result.jobs = mSettings->value(SETTINGS_CHECK_THREADS, 1).toInt();
|
||||
result.inlineSuppressions = mSettings->value(SETTINGS_INLINE_SUPPRESSIONS, false).toBool();
|
||||
result.certainty.setEnabled(Certainty::inconclusive, mSettings->value(SETTINGS_INCONCLUSIVE_ERRORS, false).toBool());
|
||||
if (!mProjectFile || result.platform.type == cppcheck::Platform::Type::Unspecified)
|
||||
result.platform.set((cppcheck::Platform::Type) mSettings->value(SETTINGS_CHECKED_PLATFORM, 0).toInt());
|
||||
if (!mProjectFile || result.platform.type == Platform::Type::Unspecified)
|
||||
result.platform.set((Platform::Type) mSettings->value(SETTINGS_CHECKED_PLATFORM, 0).toInt());
|
||||
result.standards.setCPP(mSettings->value(SETTINGS_STD_CPP, QString()).toString().toStdString());
|
||||
result.standards.setC(mSettings->value(SETTINGS_STD_C, QString()).toString().toStdString());
|
||||
result.enforcedLang = (Settings::Language)mSettings->value(SETTINGS_ENFORCED_LANGUAGE, 0).toInt();
|
||||
|
@ -1987,7 +1987,7 @@ void MainWindow::selectPlatform()
|
|||
{
|
||||
QAction *action = qobject_cast<QAction *>(sender());
|
||||
if (action) {
|
||||
const cppcheck::Platform::Type platform = (cppcheck::Platform::Type) action->data().toInt();
|
||||
const Platform::Type platform = (Platform::Type) action->data().toInt();
|
||||
mSettings->setValue(SETTINGS_CHECKED_PLATFORM, platform);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,9 +24,9 @@ Platforms::Platforms(QObject *parent)
|
|||
init();
|
||||
}
|
||||
|
||||
void Platforms::add(const QString &title, cppcheck::Platform::Type platform)
|
||||
void Platforms::add(const QString &title, Platform::Type platform)
|
||||
{
|
||||
Platform plat;
|
||||
PlatformData plat;
|
||||
plat.mTitle = title;
|
||||
plat.mType = platform;
|
||||
plat.mActMainWindow = nullptr;
|
||||
|
@ -35,12 +35,12 @@ void Platforms::add(const QString &title, cppcheck::Platform::Type platform)
|
|||
|
||||
void Platforms::init()
|
||||
{
|
||||
add(tr("Native"), cppcheck::Platform::Type::Native);
|
||||
add(tr("Unix 32-bit"), cppcheck::Platform::Type::Unix32);
|
||||
add(tr("Unix 64-bit"), cppcheck::Platform::Type::Unix64);
|
||||
add(tr("Windows 32-bit ANSI"), cppcheck::Platform::Type::Win32A);
|
||||
add(tr("Windows 32-bit Unicode"), cppcheck::Platform::Type::Win32W);
|
||||
add(tr("Windows 64-bit"), cppcheck::Platform::Type::Win64);
|
||||
add(tr("Native"), Platform::Type::Native);
|
||||
add(tr("Unix 32-bit"), Platform::Type::Unix32);
|
||||
add(tr("Unix 64-bit"), Platform::Type::Unix64);
|
||||
add(tr("Windows 32-bit ANSI"), Platform::Type::Win32A);
|
||||
add(tr("Windows 32-bit Unicode"), Platform::Type::Win32W);
|
||||
add(tr("Windows 64-bit"), Platform::Type::Win64);
|
||||
}
|
||||
|
||||
int Platforms::getCount() const
|
||||
|
@ -48,9 +48,9 @@ int Platforms::getCount() const
|
|||
return mPlatforms.count();
|
||||
}
|
||||
|
||||
Platform& Platforms::get(cppcheck::Platform::Type platform)
|
||||
PlatformData& Platforms::get(Platform::Type platform)
|
||||
{
|
||||
QList<Platform>::iterator iter = mPlatforms.begin();
|
||||
QList<PlatformData>::iterator iter = mPlatforms.begin();
|
||||
while (iter != mPlatforms.end()) {
|
||||
if ((*iter).mType == platform) {
|
||||
return *iter;
|
||||
|
|
|
@ -33,9 +33,9 @@ class QAction;
|
|||
/**
|
||||
* @brief Checked platform GUI-data.
|
||||
*/
|
||||
struct Platform {
|
||||
struct PlatformData {
|
||||
QString mTitle; /**< Text visible in the GUI. */
|
||||
cppcheck::Platform::Type mType; /**< Type in the core. */
|
||||
Platform::Type mType; /**< Type in the core. */
|
||||
QAction *mActMainWindow; /**< Pointer to main window action item. */
|
||||
};
|
||||
|
||||
|
@ -47,12 +47,12 @@ class Platforms : public QObject {
|
|||
|
||||
public:
|
||||
explicit Platforms(QObject *parent = nullptr);
|
||||
void add(const QString &title, cppcheck::Platform::Type platform);
|
||||
void add(const QString &title, Platform::Type platform);
|
||||
int getCount() const;
|
||||
void init();
|
||||
Platform& get(cppcheck::Platform::Type platform);
|
||||
PlatformData& get(Platform::Type platform);
|
||||
|
||||
QList<Platform> mPlatforms;
|
||||
QList<PlatformData> mPlatforms;
|
||||
};
|
||||
|
||||
/// @}
|
||||
|
|
|
@ -77,13 +77,13 @@ static QStringList getPaths(const QListWidget *list)
|
|||
}
|
||||
|
||||
/** Platforms shown in the platform combobox */
|
||||
static const cppcheck::Platform::Type builtinPlatforms[] = {
|
||||
cppcheck::Platform::Type::Native,
|
||||
cppcheck::Platform::Type::Win32A,
|
||||
cppcheck::Platform::Type::Win32W,
|
||||
cppcheck::Platform::Type::Win64,
|
||||
cppcheck::Platform::Type::Unix32,
|
||||
cppcheck::Platform::Type::Unix64
|
||||
static const Platform::Type builtinPlatforms[] = {
|
||||
Platform::Type::Native,
|
||||
Platform::Type::Win32A,
|
||||
Platform::Type::Win32W,
|
||||
Platform::Type::Win64,
|
||||
Platform::Type::Unix32,
|
||||
Platform::Type::Unix64
|
||||
};
|
||||
|
||||
static const int numberOfBuiltinPlatforms = sizeof(builtinPlatforms) / sizeof(builtinPlatforms[0]);
|
||||
|
@ -190,7 +190,7 @@ ProjectFileDialog::ProjectFileDialog(ProjectFile *projectFile, bool premium, QWi
|
|||
|
||||
// Platforms..
|
||||
Platforms platforms;
|
||||
for (const cppcheck::Platform::Type builtinPlatform : builtinPlatforms)
|
||||
for (const Platform::Type builtinPlatform : builtinPlatforms)
|
||||
mUI->mComboBoxPlatform->addItem(platforms.get(builtinPlatform).mTitle);
|
||||
QStringList platformFiles;
|
||||
for (QString sp : searchPaths) {
|
||||
|
@ -203,7 +203,7 @@ ProjectFileDialog::ProjectFileDialog(ProjectFile *projectFile, bool premium, QWi
|
|||
for (const QFileInfo& item : dir.entryInfoList()) {
|
||||
const QString platformFile = item.fileName();
|
||||
|
||||
cppcheck::Platform plat2;
|
||||
Platform plat2;
|
||||
if (!plat2.loadFromFile(applicationFilePath.toStdString().c_str(), platformFile.toStdString()))
|
||||
continue;
|
||||
|
||||
|
@ -336,8 +336,8 @@ void ProjectFileDialog::loadFromProjectFile(const ProjectFile *projectFile)
|
|||
} else {
|
||||
int i;
|
||||
for (i = 0; i < numberOfBuiltinPlatforms; ++i) {
|
||||
const cppcheck::Platform::Type p = builtinPlatforms[i];
|
||||
if (platform == cppcheck::Platform::toString(p))
|
||||
const Platform::Type p = builtinPlatforms[i];
|
||||
if (platform == Platform::toString(p))
|
||||
break;
|
||||
}
|
||||
if (i < numberOfBuiltinPlatforms)
|
||||
|
@ -445,7 +445,7 @@ void ProjectFileDialog::saveToProjectFile(ProjectFile *projectFile) const
|
|||
else {
|
||||
const int i = mUI->mComboBoxPlatform->currentIndex();
|
||||
if (i>=0 && i < numberOfBuiltinPlatforms)
|
||||
projectFile->setPlatform(cppcheck::Platform::toString(builtinPlatforms[i]));
|
||||
projectFile->setPlatform(Platform::toString(builtinPlatforms[i]));
|
||||
else
|
||||
projectFile->setPlatform(QString());
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ const char Settings::SafeChecks::XmlExternalFunctions[] = "external-functions";
|
|||
const char Settings::SafeChecks::XmlInternalFunctions[] = "internal-functions";
|
||||
const char Settings::SafeChecks::XmlExternalVariables[] = "external-variables";
|
||||
Settings::Settings() : maxCtuDepth(10) {}
|
||||
cppcheck::Platform::Platform() = default;
|
||||
Platform::Platform() = default;
|
||||
bool ImportProject::sourceFileExists(const std::string & /*file*/) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1912,8 +1912,8 @@ void CheckCondition::checkCompareValueOutOfTypeRange()
|
|||
if (!mSettings->severity.isEnabled(Severity::style))
|
||||
return;
|
||||
|
||||
if (mSettings->platform.type == cppcheck::Platform::Type::Native ||
|
||||
mSettings->platform.type == cppcheck::Platform::Type::Unspecified)
|
||||
if (mSettings->platform.type == Platform::Type::Native ||
|
||||
mSettings->platform.type == Platform::Type::Unspecified)
|
||||
return;
|
||||
|
||||
logChecker("CheckCondition::checkCompareValueOutOfTypeRange"); // style,platform
|
||||
|
|
|
@ -61,7 +61,7 @@ static const CWE CWE190(190U); // Integer Overflow or Wraparound
|
|||
void CheckType::checkTooBigBitwiseShift()
|
||||
{
|
||||
// unknown sizeof(int) => can't run this checker
|
||||
if (mSettings->platform.type == cppcheck::Platform::Type::Unspecified)
|
||||
if (mSettings->platform.type == Platform::Type::Unspecified)
|
||||
return;
|
||||
|
||||
logChecker("CheckType::checkTooBigBitwiseShift"); // platform
|
||||
|
@ -167,7 +167,7 @@ void CheckType::tooBigSignedBitwiseShiftError(const Token *tok, int lhsbits, con
|
|||
void CheckType::checkIntegerOverflow()
|
||||
{
|
||||
// unknown sizeof(int) => can't run this checker
|
||||
if (mSettings->platform.type == cppcheck::Platform::Type::Unspecified || mSettings->platform.int_bit >= MathLib::bigint_bits)
|
||||
if (mSettings->platform.type == Platform::Type::Unspecified || mSettings->platform.int_bit >= MathLib::bigint_bits)
|
||||
return;
|
||||
|
||||
logChecker("CheckType::checkIntegerOverflow"); // platform
|
||||
|
@ -476,7 +476,7 @@ void CheckType::checkFloatToIntegerOverflow(const Token *tok, const ValueType *v
|
|||
floatToIntegerOverflowError(tok, f);
|
||||
else if ((-f.floatValue) > std::exp2(mSettings->platform.long_long_bit - 1))
|
||||
floatToIntegerOverflowError(tok, f);
|
||||
else if (mSettings->platform.type != cppcheck::Platform::Type::Unspecified) {
|
||||
else if (mSettings->platform.type != Platform::Type::Unspecified) {
|
||||
int bits = 0;
|
||||
if (vtint->type == ValueType::Type::CHAR)
|
||||
bits = mSettings->platform.char_bit;
|
||||
|
|
|
@ -561,7 +561,7 @@ unsigned int CppCheck::check(const ImportProject::FileSettings &fs)
|
|||
temp.mSettings.standards.setCPP(fs.standard);
|
||||
else if (!fs.standard.empty())
|
||||
temp.mSettings.standards.setC(fs.standard);
|
||||
if (fs.platformType != cppcheck::Platform::Type::Unspecified)
|
||||
if (fs.platformType != Platform::Type::Unspecified)
|
||||
temp.mSettings.platform.set(fs.platformType);
|
||||
if (mSettings.clang) {
|
||||
temp.mSettings.includePaths.insert(temp.mSettings.includePaths.end(), fs.systemIncludePaths.cbegin(), fs.systemIncludePaths.cend());
|
||||
|
|
|
@ -756,9 +756,9 @@ bool ImportProject::importVcxproj(const std::string &filename, std::map<std::str
|
|||
fs.useMfc = useOfMfc;
|
||||
fs.defines = "_WIN32=1";
|
||||
if (p.platform == ProjectConfiguration::Win32)
|
||||
fs.platformType = cppcheck::Platform::Type::Win32W;
|
||||
fs.platformType = Platform::Type::Win32W;
|
||||
else if (p.platform == ProjectConfiguration::x64) {
|
||||
fs.platformType = cppcheck::Platform::Type::Win64;
|
||||
fs.platformType = Platform::Type::Win64;
|
||||
fs.defines += ";_WIN64=1";
|
||||
}
|
||||
std::string additionalIncludePaths;
|
||||
|
@ -1264,7 +1264,7 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti
|
|||
return true;
|
||||
}
|
||||
|
||||
void ImportProject::selectOneVsConfig(cppcheck::Platform::Type platform)
|
||||
void ImportProject::selectOneVsConfig(Platform::Type platform)
|
||||
{
|
||||
std::set<std::string> filenames;
|
||||
for (std::list<ImportProject::FileSettings>::iterator it = fileSettings.begin(); it != fileSettings.end();) {
|
||||
|
@ -1276,9 +1276,9 @@ void ImportProject::selectOneVsConfig(cppcheck::Platform::Type platform)
|
|||
bool remove = false;
|
||||
if (!startsWith(fs.cfg,"Debug"))
|
||||
remove = true;
|
||||
if (platform == cppcheck::Platform::Type::Win64 && fs.platformType != platform)
|
||||
if (platform == Platform::Type::Win64 && fs.platformType != platform)
|
||||
remove = true;
|
||||
else if ((platform == cppcheck::Platform::Type::Win32A || platform == cppcheck::Platform::Type::Win32W) && fs.platformType == cppcheck::Platform::Type::Win64)
|
||||
else if ((platform == Platform::Type::Win32A || platform == Platform::Type::Win32W) && fs.platformType == Platform::Type::Win64)
|
||||
remove = true;
|
||||
else if (filenames.find(fs.filename) != filenames.end())
|
||||
remove = true;
|
||||
|
@ -1291,7 +1291,7 @@ void ImportProject::selectOneVsConfig(cppcheck::Platform::Type platform)
|
|||
}
|
||||
}
|
||||
|
||||
void ImportProject::selectVsConfigurations(cppcheck::Platform::Type platform, const std::vector<std::string> &configurations)
|
||||
void ImportProject::selectVsConfigurations(Platform::Type platform, const std::vector<std::string> &configurations)
|
||||
{
|
||||
for (std::list<ImportProject::FileSettings>::iterator it = fileSettings.begin(); it != fileSettings.end();) {
|
||||
if (it->cfg.empty()) {
|
||||
|
@ -1303,9 +1303,9 @@ void ImportProject::selectVsConfigurations(cppcheck::Platform::Type platform, co
|
|||
bool remove = false;
|
||||
if (std::find(configurations.begin(), configurations.end(), config) == configurations.end())
|
||||
remove = true;
|
||||
if (platform == cppcheck::Platform::Type::Win64 && fs.platformType != platform)
|
||||
if (platform == Platform::Type::Win64 && fs.platformType != platform)
|
||||
remove = true;
|
||||
else if ((platform == cppcheck::Platform::Type::Win32A || platform == cppcheck::Platform::Type::Win32W) && fs.platformType == cppcheck::Platform::Type::Win64)
|
||||
else if ((platform == Platform::Type::Win32A || platform == Platform::Type::Win32W) && fs.platformType == Platform::Type::Win64)
|
||||
remove = true;
|
||||
if (remove) {
|
||||
it = fileSettings.erase(it);
|
||||
|
|
|
@ -74,7 +74,7 @@ public:
|
|||
std::list<std::string> includePaths;
|
||||
std::list<std::string> systemIncludePaths;
|
||||
std::string standard;
|
||||
cppcheck::Platform::Type platformType = cppcheck::Platform::Type::Unspecified;
|
||||
Platform::Type platformType = Platform::Type::Unspecified;
|
||||
bool msc{};
|
||||
bool useMfc{};
|
||||
|
||||
|
@ -90,8 +90,8 @@ public:
|
|||
ImportProject(const ImportProject&) = default;
|
||||
ImportProject& operator=(const ImportProject&) = default;
|
||||
|
||||
void selectOneVsConfig(cppcheck::Platform::Type platform);
|
||||
void selectVsConfigurations(cppcheck::Platform::Type platform, const std::vector<std::string> &configurations);
|
||||
void selectOneVsConfig(Platform::Type platform);
|
||||
void selectVsConfigurations(Platform::Type platform, const std::vector<std::string> &configurations);
|
||||
|
||||
std::list<std::string> getVSConfigs();
|
||||
|
||||
|
|
|
@ -27,13 +27,13 @@
|
|||
|
||||
#include <tinyxml2.h>
|
||||
|
||||
cppcheck::Platform::Platform()
|
||||
Platform::Platform()
|
||||
{
|
||||
set(Type::Native);
|
||||
}
|
||||
|
||||
|
||||
bool cppcheck::Platform::set(Type t)
|
||||
bool Platform::set(Type t)
|
||||
{
|
||||
switch (t) {
|
||||
case Type::Unspecified: // unknown type sizes (sizes etc are set but are not known)
|
||||
|
@ -150,7 +150,7 @@ bool cppcheck::Platform::set(Type t)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool cppcheck::Platform::set(const std::string& platformstr, std::string& errstr, const std::vector<std::string>& paths, bool verbose)
|
||||
bool Platform::set(const std::string& platformstr, std::string& errstr, const std::vector<std::string>& paths, bool verbose)
|
||||
{
|
||||
if (platformstr == "win32A")
|
||||
set(Type::Win32A);
|
||||
|
@ -189,7 +189,7 @@ bool cppcheck::Platform::set(const std::string& platformstr, std::string& errstr
|
|||
return true;
|
||||
}
|
||||
|
||||
bool cppcheck::Platform::loadFromFile(const char exename[], const std::string &filename, bool verbose)
|
||||
bool Platform::loadFromFile(const char exename[], const std::string &filename, bool verbose)
|
||||
{
|
||||
// TODO: only append .xml if missing
|
||||
// TODO: use native separators
|
||||
|
@ -240,7 +240,7 @@ static unsigned int xmlTextAsUInt(const tinyxml2::XMLElement* node, bool& error)
|
|||
return retval;
|
||||
}
|
||||
|
||||
bool cppcheck::Platform::loadFromXmlDocument(const tinyxml2::XMLDocument *doc)
|
||||
bool Platform::loadFromXmlDocument(const tinyxml2::XMLDocument *doc)
|
||||
{
|
||||
const tinyxml2::XMLElement * const rootnode = doc->FirstChildElement();
|
||||
|
||||
|
|
268
lib/platform.h
268
lib/platform.h
|
@ -35,154 +35,150 @@ namespace tinyxml2 {
|
|||
class XMLDocument;
|
||||
}
|
||||
|
||||
namespace cppcheck {
|
||||
/**
|
||||
* @brief Platform settings
|
||||
*/
|
||||
class CPPCHECKLIB Platform {
|
||||
private:
|
||||
static long long min_value(int bit) {
|
||||
if (bit >= 64)
|
||||
return LLONG_MIN;
|
||||
return -(1LL << (bit-1));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Platform settings
|
||||
*/
|
||||
class CPPCHECKLIB Platform {
|
||||
private:
|
||||
static long long min_value(int bit) {
|
||||
if (bit >= 64)
|
||||
return LLONG_MIN;
|
||||
return -(1LL << (bit-1));
|
||||
}
|
||||
static long long max_value(int bit) {
|
||||
if (bit >= 64)
|
||||
return (~0ULL) >> 1;
|
||||
return (1LL << (bit-1)) - 1LL;
|
||||
}
|
||||
public:
|
||||
Platform();
|
||||
|
||||
static long long max_value(int bit) {
|
||||
if (bit >= 64)
|
||||
return (~0ULL) >> 1;
|
||||
return (1LL << (bit-1)) - 1LL;
|
||||
}
|
||||
public:
|
||||
Platform();
|
||||
bool isIntValue(long long value) const {
|
||||
return value >= min_value(int_bit) && value <= max_value(int_bit);
|
||||
}
|
||||
|
||||
bool isIntValue(long long value) const {
|
||||
return value >= min_value(int_bit) && value <= max_value(int_bit);
|
||||
}
|
||||
bool isIntValue(unsigned long long value) const {
|
||||
const unsigned long long intMax = max_value(int_bit);
|
||||
return value <= intMax;
|
||||
}
|
||||
|
||||
bool isIntValue(unsigned long long value) const {
|
||||
const unsigned long long intMax = max_value(int_bit);
|
||||
return value <= intMax;
|
||||
}
|
||||
bool isLongValue(long long value) const {
|
||||
return value >= min_value(long_bit) && value <= max_value(long_bit);
|
||||
}
|
||||
|
||||
bool isLongValue(long long value) const {
|
||||
return value >= min_value(long_bit) && value <= max_value(long_bit);
|
||||
}
|
||||
bool isLongValue(unsigned long long value) const {
|
||||
const unsigned long long longMax = max_value(long_bit);
|
||||
return value <= longMax;
|
||||
}
|
||||
|
||||
bool isLongValue(unsigned long long value) const {
|
||||
const unsigned long long longMax = max_value(long_bit);
|
||||
return value <= longMax;
|
||||
}
|
||||
bool isLongLongValue(unsigned long long value) const {
|
||||
const unsigned long long longLongMax = max_value(long_long_bit);
|
||||
return value <= longLongMax;
|
||||
}
|
||||
|
||||
bool isLongLongValue(unsigned long long value) const {
|
||||
const unsigned long long longLongMax = max_value(long_long_bit);
|
||||
return value <= longLongMax;
|
||||
}
|
||||
nonneg int char_bit; /// bits in char
|
||||
nonneg int short_bit; /// bits in short
|
||||
nonneg int int_bit; /// bits in int
|
||||
nonneg int long_bit; /// bits in long
|
||||
nonneg int long_long_bit; /// bits in long long
|
||||
|
||||
nonneg int char_bit; /// bits in char
|
||||
nonneg int short_bit; /// bits in short
|
||||
nonneg int int_bit; /// bits in int
|
||||
nonneg int long_bit; /// bits in long
|
||||
nonneg int long_long_bit; /// bits in long long
|
||||
/** size of standard types */
|
||||
nonneg int sizeof_bool;
|
||||
nonneg int sizeof_short;
|
||||
nonneg int sizeof_int;
|
||||
nonneg int sizeof_long;
|
||||
nonneg int sizeof_long_long;
|
||||
nonneg int sizeof_float;
|
||||
nonneg int sizeof_double;
|
||||
nonneg int sizeof_long_double;
|
||||
nonneg int sizeof_wchar_t;
|
||||
nonneg int sizeof_size_t;
|
||||
nonneg int sizeof_pointer;
|
||||
|
||||
/** size of standard types */
|
||||
nonneg int sizeof_bool;
|
||||
nonneg int sizeof_short;
|
||||
nonneg int sizeof_int;
|
||||
nonneg int sizeof_long;
|
||||
nonneg int sizeof_long_long;
|
||||
nonneg int sizeof_float;
|
||||
nonneg int sizeof_double;
|
||||
nonneg int sizeof_long_double;
|
||||
nonneg int sizeof_wchar_t;
|
||||
nonneg int sizeof_size_t;
|
||||
nonneg int sizeof_pointer;
|
||||
char defaultSign; // unsigned:'u', signed:'s', unknown:'\0'
|
||||
|
||||
char defaultSign; // unsigned:'u', signed:'s', unknown:'\0'
|
||||
|
||||
enum Type {
|
||||
Unspecified, // No platform specified
|
||||
Native, // whatever system this code was compiled on
|
||||
Win32A,
|
||||
Win32W,
|
||||
Win64,
|
||||
Unix32,
|
||||
Unix64,
|
||||
File
|
||||
};
|
||||
|
||||
/** platform type */
|
||||
Type type;
|
||||
|
||||
/** set the platform type for predefined platforms - deprecated use set(const std::string&, std::string&) instead */
|
||||
bool set(Type t);
|
||||
|
||||
/** set the platform type */
|
||||
bool set(const std::string& platformstr, std::string& errstr, const std::vector<std::string>& paths = {}, bool verbose = false);
|
||||
|
||||
/**
|
||||
* load platform file
|
||||
* @param exename application path
|
||||
* @param filename platform filename
|
||||
* @param verbose log verbose information about the lookup
|
||||
* @return returns true if file was loaded successfully
|
||||
*/
|
||||
bool loadFromFile(const char exename[], const std::string &filename, bool verbose = false);
|
||||
|
||||
/** load platform from xml document, primarily for testing */
|
||||
bool loadFromXmlDocument(const tinyxml2::XMLDocument *doc);
|
||||
|
||||
/**
|
||||
* @brief Returns true if platform type is Windows
|
||||
* @return true if Windows platform type.
|
||||
*/
|
||||
bool isWindows() const {
|
||||
return type == Type::Win32A ||
|
||||
type == Type::Win32W ||
|
||||
type == Type::Win64;
|
||||
}
|
||||
|
||||
const char *toString() const {
|
||||
return toString(type);
|
||||
}
|
||||
|
||||
static const char *toString(Type pt) {
|
||||
switch (pt) {
|
||||
case Type::Unspecified:
|
||||
return "unspecified";
|
||||
case Type::Native:
|
||||
return "native";
|
||||
case Type::Win32A:
|
||||
return "win32A";
|
||||
case Type::Win32W:
|
||||
return "win32W";
|
||||
case Type::Win64:
|
||||
return "win64";
|
||||
case Type::Unix32:
|
||||
return "unix32";
|
||||
case Type::Unix64:
|
||||
return "unix64";
|
||||
case Type::File:
|
||||
return "platformFile";
|
||||
default:
|
||||
throw std::runtime_error("unknown platform");
|
||||
}
|
||||
}
|
||||
|
||||
long long unsignedCharMax() const {
|
||||
return max_value(char_bit + 1);
|
||||
}
|
||||
|
||||
long long signedCharMax() const {
|
||||
return max_value(char_bit);
|
||||
}
|
||||
|
||||
long long signedCharMin() const {
|
||||
return min_value(char_bit);
|
||||
}
|
||||
enum Type {
|
||||
Unspecified, // No platform specified
|
||||
Native, // whatever system this code was compiled on
|
||||
Win32A,
|
||||
Win32W,
|
||||
Win64,
|
||||
Unix32,
|
||||
Unix64,
|
||||
File
|
||||
};
|
||||
|
||||
}
|
||||
/** platform type */
|
||||
Type type;
|
||||
|
||||
/** set the platform type for predefined platforms - deprecated use set(const std::string&, std::string&) instead */
|
||||
bool set(Type t);
|
||||
|
||||
/** set the platform type */
|
||||
bool set(const std::string& platformstr, std::string& errstr, const std::vector<std::string>& paths = {}, bool verbose = false);
|
||||
|
||||
/**
|
||||
* load platform file
|
||||
* @param exename application path
|
||||
* @param filename platform filename
|
||||
* @param verbose log verbose information about the lookup
|
||||
* @return returns true if file was loaded successfully
|
||||
*/
|
||||
bool loadFromFile(const char exename[], const std::string &filename, bool verbose = false);
|
||||
|
||||
/** load platform from xml document, primarily for testing */
|
||||
bool loadFromXmlDocument(const tinyxml2::XMLDocument *doc);
|
||||
|
||||
/**
|
||||
* @brief Returns true if platform type is Windows
|
||||
* @return true if Windows platform type.
|
||||
*/
|
||||
bool isWindows() const {
|
||||
return type == Type::Win32A ||
|
||||
type == Type::Win32W ||
|
||||
type == Type::Win64;
|
||||
}
|
||||
|
||||
const char *toString() const {
|
||||
return toString(type);
|
||||
}
|
||||
|
||||
static const char *toString(Type pt) {
|
||||
switch (pt) {
|
||||
case Type::Unspecified:
|
||||
return "unspecified";
|
||||
case Type::Native:
|
||||
return "native";
|
||||
case Type::Win32A:
|
||||
return "win32A";
|
||||
case Type::Win32W:
|
||||
return "win32W";
|
||||
case Type::Win64:
|
||||
return "win64";
|
||||
case Type::Unix32:
|
||||
return "unix32";
|
||||
case Type::Unix64:
|
||||
return "unix64";
|
||||
case Type::File:
|
||||
return "platformFile";
|
||||
default:
|
||||
throw std::runtime_error("unknown platform");
|
||||
}
|
||||
}
|
||||
|
||||
long long unsignedCharMax() const {
|
||||
return max_value(char_bit + 1);
|
||||
}
|
||||
|
||||
long long signedCharMax() const {
|
||||
return max_value(char_bit);
|
||||
}
|
||||
|
||||
long long signedCharMin() const {
|
||||
return min_value(char_bit);
|
||||
}
|
||||
};
|
||||
|
||||
/// @}
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
@ -245,7 +245,7 @@ public:
|
|||
/** @brief write results (--output-file=<file>) */
|
||||
std::string outputFile;
|
||||
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
|
||||
/** @brief Experimental: --performance-valueflow-max-time=T */
|
||||
int performanceValueFlowMaxTime = -1;
|
||||
|
|
|
@ -6313,7 +6313,7 @@ void SymbolDatabase::setValueType(Token* tok, const Variable& var, SourceLocatio
|
|||
}
|
||||
}
|
||||
|
||||
static ValueType::Type getEnumType(const Scope* scope, const cppcheck::Platform& platform);
|
||||
static ValueType::Type getEnumType(const Scope* scope, const Platform& platform);
|
||||
|
||||
void SymbolDatabase::setValueType(Token* tok, const Enumerator& enumerator, SourceLocation loc)
|
||||
{
|
||||
|
@ -6830,7 +6830,7 @@ void SymbolDatabase::setValueType(Token* tok, const ValueType& valuetype, Source
|
|||
}
|
||||
}
|
||||
|
||||
static ValueType::Type getEnumType(const Scope* scope, const cppcheck::Platform& platform) // TODO: also determine sign?
|
||||
static ValueType::Type getEnumType(const Scope* scope, const Platform& platform) // TODO: also determine sign?
|
||||
{
|
||||
ValueType::Type type = ValueType::Type::INT;
|
||||
for (const Token* tok = scope->bodyStart; tok && tok != scope->bodyEnd; tok = tok->next()) {
|
||||
|
@ -7151,7 +7151,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
|
|||
pos -= 2;
|
||||
} else break;
|
||||
}
|
||||
if (mSettings.platform.type != cppcheck::Platform::Type::Unspecified) {
|
||||
if (mSettings.platform.type != Platform::Type::Unspecified) {
|
||||
if (type <= ValueType::Type::INT && mSettings.platform.isIntValue(unsignedSuffix ? (value >> 1) : value))
|
||||
type = ValueType::Type::INT;
|
||||
else if (type <= ValueType::Type::INT && !MathLib::isDec(tokStr) && mSettings.platform.isIntValue(value >> 2)) {
|
||||
|
@ -7242,7 +7242,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
|
|||
|
||||
else if (Token::simpleMatch(tok->previous(), "sizeof (")) {
|
||||
ValueType valuetype(ValueType::Sign::UNSIGNED, ValueType::Type::LONG, 0U);
|
||||
if (mSettings.platform.type == cppcheck::Platform::Type::Win64)
|
||||
if (mSettings.platform.type == Platform::Type::Win64)
|
||||
valuetype.type = ValueType::Type::LONGLONG;
|
||||
|
||||
valuetype.originalTypeName = "size_t";
|
||||
|
@ -7779,7 +7779,7 @@ bool ValueType::isConst(nonneg int indirect) const
|
|||
return constness & (1 << (pointer - indirect));
|
||||
}
|
||||
|
||||
MathLib::bigint ValueType::typeSize(const cppcheck::Platform &platform, bool p) const
|
||||
MathLib::bigint ValueType::typeSize(const Platform &platform, bool p) const
|
||||
{
|
||||
if (p && pointer)
|
||||
return platform.sizeof_pointer;
|
||||
|
|
|
@ -40,10 +40,7 @@
|
|||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace cppcheck {
|
||||
class Platform;
|
||||
}
|
||||
|
||||
class Platform;
|
||||
class ErrorLogger;
|
||||
class Function;
|
||||
class Scope;
|
||||
|
@ -1298,7 +1295,7 @@ public:
|
|||
|
||||
bool isConst(nonneg int indirect = 0) const;
|
||||
|
||||
MathLib::bigint typeSize(const cppcheck::Platform &platform, bool p=false) const;
|
||||
MathLib::bigint typeSize(const Platform &platform, bool p=false) const;
|
||||
|
||||
/// Check if type is the same ignoring const and references
|
||||
bool isTypeEqual(const ValueType* that) const;
|
||||
|
|
|
@ -9766,7 +9766,7 @@ void Tokenizer::simplifyMicrosoftStringFunctions()
|
|||
if (!mSettings->platform.isWindows())
|
||||
return;
|
||||
|
||||
const bool ansi = mSettings->platform.type == cppcheck::Platform::Type::Win32A;
|
||||
const bool ansi = mSettings->platform.type == Platform::Type::Win32A;
|
||||
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
||||
if (tok->strAt(1) != "(")
|
||||
continue;
|
||||
|
|
|
@ -1128,7 +1128,7 @@ size_t ValueFlow::getSizeOf(const ValueType &vt, const Settings *settings)
|
|||
}
|
||||
|
||||
|
||||
static bool getMinMaxValues(const ValueType* vt, const cppcheck::Platform& platform, MathLib::bigint& minValue, MathLib::bigint& maxValue);
|
||||
static bool getMinMaxValues(const ValueType* vt, const Platform& platform, MathLib::bigint& minValue, MathLib::bigint& maxValue);
|
||||
|
||||
// Handle various constants..
|
||||
static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, bool cpp)
|
||||
|
@ -1193,7 +1193,7 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
|
|||
const size_t sz = vt ? ValueFlow::getSizeOf(*vt, settings) : 0;
|
||||
if (sz > 0) {
|
||||
ValueFlow::Value value(sz);
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != cppcheck::Platform::Type::Unspecified)
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != Platform::Type::Unspecified)
|
||||
value.setKnown();
|
||||
setTokenValue(tok->next(), std::move(value), settings);
|
||||
}
|
||||
|
@ -1206,7 +1206,7 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
|
|||
tok->linkAt(1);
|
||||
}
|
||||
ValueFlow::Value value(size);
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != cppcheck::Platform::Type::Unspecified)
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != Platform::Type::Unspecified)
|
||||
value.setKnown();
|
||||
setTokenValue(tok, value, settings);
|
||||
setTokenValue(tok->next(), std::move(value), settings);
|
||||
|
@ -1219,7 +1219,7 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
|
|||
}
|
||||
}
|
||||
ValueFlow::Value value(size);
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != cppcheck::Platform::Type::Unspecified)
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != Platform::Type::Unspecified)
|
||||
value.setKnown();
|
||||
setTokenValue(tok, value, settings);
|
||||
setTokenValue(tok->next(), std::move(value), settings);
|
||||
|
@ -1236,7 +1236,7 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
|
|||
sz1->variable()->dimensionKnown(0) &&
|
||||
Token::Match(sz2->astOperand2(), "*|[") && Token::Match(sz2->astOperand2()->astOperand1(), "%varid%", varid1)) {
|
||||
ValueFlow::Value value(sz1->variable()->dimension(0));
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != cppcheck::Platform::Type::Unspecified)
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != Platform::Type::Unspecified)
|
||||
value.setKnown();
|
||||
setTokenValue(tok->tokAt(4), std::move(value), settings);
|
||||
}
|
||||
|
@ -1265,7 +1265,7 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
|
|||
}
|
||||
if (size && count > 0) {
|
||||
ValueFlow::Value value(count * size);
|
||||
if (settings->platform.type != cppcheck::Platform::Type::Unspecified)
|
||||
if (settings->platform.type != Platform::Type::Unspecified)
|
||||
value.setKnown();
|
||||
setTokenValue(tok, value, settings);
|
||||
setTokenValue(tok->next(), std::move(value), settings);
|
||||
|
@ -1320,7 +1320,7 @@ static Token * valueFlowSetConstantValue(Token *tok, const Settings *settings, b
|
|||
}
|
||||
if (sz > 0) {
|
||||
ValueFlow::Value value(sz);
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != cppcheck::Platform::Type::Unspecified)
|
||||
if (!tok2->isTemplateArg() && settings->platform.type != Platform::Type::Unspecified)
|
||||
value.setKnown();
|
||||
setTokenValue(tok->next(), std::move(value), settings);
|
||||
}
|
||||
|
@ -8947,7 +8947,7 @@ static void valueFlowDynamicBufferSize(const TokenList& tokenlist, const SymbolD
|
|||
}
|
||||
}
|
||||
|
||||
static bool getMinMaxValues(const ValueType *vt, const cppcheck::Platform &platform, MathLib::bigint &minValue, MathLib::bigint &maxValue)
|
||||
static bool getMinMaxValues(const ValueType *vt, const Platform &platform, MathLib::bigint &minValue, MathLib::bigint &maxValue)
|
||||
{
|
||||
if (!vt || !vt->isIntegral() || vt->pointer)
|
||||
return false;
|
||||
|
@ -9024,7 +9024,7 @@ static void valueFlowSafeFunctions(TokenList& tokenlist, const SymbolDatabase& s
|
|||
continue;
|
||||
|
||||
const bool safe = function->isSafe(settings);
|
||||
const bool all = safe && settings->platform.type != cppcheck::Platform::Type::Unspecified;
|
||||
const bool all = safe && settings->platform.type != Platform::Type::Unspecified;
|
||||
|
||||
for (const Variable &arg : function->argumentList) {
|
||||
if (!arg.nameToken() || !arg.valueType())
|
||||
|
|
|
@ -421,9 +421,9 @@ TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::library(const char l
|
|||
return *this;
|
||||
}
|
||||
|
||||
TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::platform(cppcheck::Platform::Type type)
|
||||
TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::platform(Platform::Type type)
|
||||
{
|
||||
const std::string platformStr = cppcheck::Platform::toString(type);
|
||||
const std::string platformStr = Platform::toString(type);
|
||||
|
||||
if (REDUNDANT_CHECK && settings.platform.type == type)
|
||||
throw std::runtime_error("redundant setting: platform (" + platformStr + ")");
|
||||
|
|
|
@ -200,7 +200,7 @@ protected:
|
|||
|
||||
SettingsBuilder& libraryxml(const char xmldata[], std::size_t len);
|
||||
|
||||
SettingsBuilder& platform(cppcheck::Platform::Type type);
|
||||
SettingsBuilder& platform(Platform::Type type);
|
||||
|
||||
SettingsBuilder& checkConfiguration() {
|
||||
if (REDUNDANT_CHECK && settings.checkConfiguration)
|
||||
|
@ -274,6 +274,6 @@ extern std::ostringstream output;
|
|||
#define LOAD_LIB_2_EXE( LIB, NAME, EXE ) do { if (((LIB).load((EXE), NAME).errorcode != Library::ErrorCode::OK)) throw std::runtime_error("library '" + std::string(NAME) + "' not found"); } while (false)
|
||||
#define LOAD_LIB_2( LIB, NAME ) LOAD_LIB_2_EXE(LIB, NAME, exename.c_str())
|
||||
|
||||
#define PLATFORM( P, T ) do { std::string errstr; assertEquals(__FILE__, __LINE__, true, P.set(cppcheck::Platform::toString(T), errstr, {exename}), errstr); } while (false)
|
||||
#define PLATFORM( P, T ) do { std::string errstr; assertEquals(__FILE__, __LINE__, true, P.set(Platform::toString(T), errstr, {exename}), errstr); } while (false)
|
||||
|
||||
#endif // fixtureH
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
TestCharVar() : TestFixture("TestCharVar") {}
|
||||
|
||||
private:
|
||||
const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::portability).platform(cppcheck::Platform::Type::Unspecified).build();
|
||||
const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::portability).platform(Platform::Type::Unspecified).build();
|
||||
|
||||
void run() override {
|
||||
TEST_CASE(array_index_1);
|
||||
|
|
|
@ -1050,7 +1050,7 @@ private:
|
|||
|
||||
|
||||
#define GET_SYMBOL_DB(AST) \
|
||||
const Settings settings = settingsBuilder().clang().platform(cppcheck::Platform::Type::Unix64).build(); \
|
||||
const Settings settings = settingsBuilder().clang().platform(Platform::Type::Unix64).build(); \
|
||||
Tokenizer tokenizer(&settings, this); \
|
||||
{ \
|
||||
std::istringstream istr(AST); \
|
||||
|
|
|
@ -1190,90 +1190,90 @@ private:
|
|||
void platformWin64() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=win64", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Win64, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Win64, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformWin32A() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=win32A", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Win32A, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Win32A, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformWin32W() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=win32W", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Win32W, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Win32W, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformUnix32() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=unix32", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unix32, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Unix32, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformUnix32Unsigned() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=unix32-unsigned", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unix32, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Unix32, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformUnix64() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=unix64", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unix64, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Unix64, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformUnix64Unsigned() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=unix64-unsigned", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unix64, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Unix64, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformNative() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=native", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Native, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Native, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformUnspecified() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=unspecified", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Native));
|
||||
ASSERT(settings->platform.set(Platform::Type::Native));
|
||||
ASSERT(parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unspecified, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::Unspecified, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
void platformPlatformFile() {
|
||||
REDIRECT;
|
||||
const char * const argv[] = {"cppcheck", "--platform=avr8", "file.cpp"};
|
||||
ASSERT(settings->platform.set(cppcheck::Platform::Type::Unspecified));
|
||||
ASSERT(settings->platform.set(Platform::Type::Unspecified));
|
||||
ASSERT_EQUALS(true, parser->parseFromArgs(3, argv));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::File, settings->platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::File, settings->platform.type);
|
||||
ASSERT_EQUALS("", logger->str());
|
||||
}
|
||||
|
||||
|
|
|
@ -5702,7 +5702,7 @@ private:
|
|||
}
|
||||
|
||||
void compareOutOfTypeRange() {
|
||||
const Settings settingsUnix64 = settingsBuilder().severity(Severity::style).platform(cppcheck::Platform::Type::Unix64).build();
|
||||
const Settings settingsUnix64 = settingsBuilder().severity(Severity::style).platform(Platform::Type::Unix64).build();
|
||||
|
||||
check("void f(unsigned char c) {\n"
|
||||
" if (c == 256) {}\n"
|
||||
|
|
258
test/testio.cpp
258
test/testio.cpp
|
@ -82,7 +82,7 @@ private:
|
|||
}
|
||||
|
||||
#define check(...) check_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
void check_(const char* file, int line, const char* code, bool inconclusive = false, bool portability = false, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Unspecified, bool onlyFormatStr = false, bool cpp = true) {
|
||||
void check_(const char* file, int line, const char* code, bool inconclusive = false, bool portability = false, Platform::Type platform = Platform::Type::Unspecified, bool onlyFormatStr = false, bool cpp = true) {
|
||||
// Clear the error buffer..
|
||||
errout.str("");
|
||||
|
||||
|
@ -178,7 +178,7 @@ private:
|
|||
" fread(buffer, 5, 6, f);\n"
|
||||
" rewind(f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
|
@ -186,7 +186,7 @@ private:
|
|||
" fread(buffer, 5, 6, f);\n"
|
||||
" rewind(f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
|
@ -194,7 +194,7 @@ private:
|
|||
" fread(buffer, 5, 6, f);\n"
|
||||
" rewind(f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
|
@ -202,7 +202,7 @@ private:
|
|||
" fread(buffer, 5, 6, f);\n"
|
||||
" rewind(f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
|
@ -210,7 +210,7 @@ private:
|
|||
" fread(buffer, 5, 6, f);\n"
|
||||
" rewind(f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
|
@ -218,7 +218,7 @@ private:
|
|||
" fread(buffer, 5, 6, f);\n"
|
||||
" rewind(f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
|
@ -230,43 +230,43 @@ private:
|
|||
check("void foo(FILE*& f) {\n"
|
||||
" f = _wfopen(name, L\"r+\");\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _tfopen(name, _T(\"r+\"));\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _tfopen(name, _T(\"r+\"));\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" _wfopen_s(&f, name, L\"r+\");\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" _tfopen_s(&f, name, _T(\"r+\"));\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" _tfopen_s(&f, name, _T(\"r+\"));\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = tmpfile();\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
// Write mode
|
||||
|
@ -333,37 +333,37 @@ private:
|
|||
check("void foo(FILE*& f) {\n"
|
||||
" f = _wfreopen(name, L\"r\", f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _tfreopen(name, _T(\"r\"), f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _tfreopen(name, _T(\"r\"), f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _wfreopen_s(&f, name, L\"r\", f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _tfreopen_s(&f, name, _T(\"r\"), f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
check("void foo(FILE*& f) {\n"
|
||||
" f = _tfreopen_s(&f, name, _T(\"r\"), f);\n"
|
||||
" fwrite(buffer, 5, 6, f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (error) Write operation on a file that was opened only for reading.\n", errout.str());
|
||||
|
||||
// Crash tests
|
||||
|
@ -821,65 +821,65 @@ private:
|
|||
|
||||
void testFormatStrNoWarn(const char *filename, unsigned int linenr, const char* code,
|
||||
bool cpp = false) {
|
||||
check(code, true, false, cppcheck::Platform::Type::Unix32, true, cpp);
|
||||
check(code, true, false, Platform::Type::Unix32, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
check(code, true, false, cppcheck::Platform::Type::Unix64, true, cpp);
|
||||
check(code, true, false, Platform::Type::Unix64, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
check(code, true, false, cppcheck::Platform::Type::Win32A, true, cpp);
|
||||
check(code, true, false, Platform::Type::Win32A, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
check(code, true, false, cppcheck::Platform::Type::Win64, true, cpp);
|
||||
check(code, true, false, Platform::Type::Win64, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
}
|
||||
|
||||
void testFormatStrWarn(const char *filename, unsigned int linenr,
|
||||
const char* code, const char* testScanfErrString,
|
||||
bool cpp = false) {
|
||||
check(code, true, false, cppcheck::Platform::Type::Unix32, true, cpp);
|
||||
check(code, true, false, Platform::Type::Unix32, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrString, errout.str());
|
||||
check(code, true, false, cppcheck::Platform::Type::Unix64, true, cpp);
|
||||
check(code, true, false, Platform::Type::Unix64, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrString, errout.str());
|
||||
check(code, true, false, cppcheck::Platform::Type::Win32A, true, cpp);
|
||||
check(code, true, false, Platform::Type::Win32A, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrString, errout.str());
|
||||
check(code, true, false, cppcheck::Platform::Type::Win64, true, cpp);
|
||||
check(code, true, false, Platform::Type::Win64, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrString, errout.str());
|
||||
}
|
||||
|
||||
void testFormatStrWarnAka(const char *filename, unsigned int linenr,
|
||||
const char* code, const char* testScanfErrAkaString, const char* testScanfErrAkaWin64String,
|
||||
bool cpp = false) {
|
||||
check(code, true, true, cppcheck::Platform::Type::Unix32, true, cpp);
|
||||
check(code, true, true, Platform::Type::Unix32, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Unix64, true, cpp);
|
||||
check(code, true, true, Platform::Type::Unix64, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Win32A, true, cpp);
|
||||
check(code, true, true, Platform::Type::Win32A, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Win64, true, cpp);
|
||||
check(code, true, true, Platform::Type::Win64, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaWin64String, errout.str());
|
||||
}
|
||||
|
||||
void testFormatStrWarnAkaWin64(const char *filename, unsigned int linenr,
|
||||
const char* code, const char* testScanfErrAkaWin64String,
|
||||
bool cpp = false) {
|
||||
check(code, true, true, cppcheck::Platform::Type::Unix32, true, cpp);
|
||||
check(code, true, true, Platform::Type::Unix32, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Unix64, true, cpp);
|
||||
check(code, true, true, Platform::Type::Unix64, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Win32A, true, cpp);
|
||||
check(code, true, true, Platform::Type::Win32A, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Win64, true, cpp);
|
||||
check(code, true, true, Platform::Type::Win64, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaWin64String, errout.str());
|
||||
}
|
||||
|
||||
void testFormatStrWarnAkaWin32(const char *filename, unsigned int linenr,
|
||||
const char* code, const char* testScanfErrAkaString,
|
||||
bool cpp = false) {
|
||||
check(code, true, true, cppcheck::Platform::Type::Unix32, true, cpp);
|
||||
check(code, true, true, Platform::Type::Unix32, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Unix64, true, cpp);
|
||||
check(code, true, true, Platform::Type::Unix64, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Win32A, true, cpp);
|
||||
check(code, true, true, Platform::Type::Win32A, true, cpp);
|
||||
assertEquals(filename, linenr, testScanfErrAkaString, errout.str());
|
||||
check(code, true, true, cppcheck::Platform::Type::Win64, true, cpp);
|
||||
check(code, true, true, Platform::Type::Win64, true, cpp);
|
||||
assertEquals(filename, linenr, emptyString, errout.str());
|
||||
}
|
||||
|
||||
|
@ -2133,13 +2133,13 @@ private:
|
|||
const char* result_win64("[test.cpp:5]: (portability) %zd in format string (no. 1) requires 'ssize_t *' but the argument type is 'size_t * {aka unsigned long long *}'.\n"
|
||||
"[test.cpp:6]: (portability) %zd in format string (no. 1) requires 'ssize_t *' but the argument type is 'ptrdiff_t * {aka signed long long *}'.\n");
|
||||
|
||||
check(code, false, true, cppcheck::Platform::Type::Unix32);
|
||||
check(code, false, true, Platform::Type::Unix32);
|
||||
ASSERT_EQUALS(result, errout.str());
|
||||
check(code, false, true, cppcheck::Platform::Type::Unix64);
|
||||
check(code, false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS(result, errout.str());
|
||||
check(code, false, true, cppcheck::Platform::Type::Win32A);
|
||||
check(code, false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS(result, errout.str());
|
||||
check(code, false, true, cppcheck::Platform::Type::Win64);
|
||||
check(code, false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS(result_win64, errout.str());
|
||||
}
|
||||
{
|
||||
|
@ -2529,56 +2529,56 @@ private:
|
|||
check("void foo(size_t s, ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix32);
|
||||
"}", false, true, Platform::Type::Unix32);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo(std::size_t s, std::ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix32);
|
||||
"}", false, true, Platform::Type::Unix32);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'std::ptrdiff_t {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo(size_t s, ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo(std::size_t s, std::ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'std::ptrdiff_t {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo(size_t s, ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo(std::size_t s, std::ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'std::ptrdiff_t {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo(size_t s, ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'size_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'ptrdiff_t {aka signed long long}'.\n", errout.str());
|
||||
|
||||
check("void foo(std::size_t s, std::ptrdiff_t p) {\n"
|
||||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%tu\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'std::size_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:3]: (portability) %tu in format string (no. 1) requires 'unsigned ptrdiff_t' but the argument type is 'std::ptrdiff_t {aka signed long long}'.\n", errout.str());
|
||||
|
||||
|
@ -2587,7 +2587,7 @@ private:
|
|||
" printf(\"%lu\", um);\n"
|
||||
" printf(\"%llu\", s);\n"
|
||||
" printf(\"%llu\", um);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %lu in format string (no. 1) requires 'unsigned long' but the argument type is 'size_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:3]: (portability) %lu in format string (no. 1) requires 'unsigned long' but the argument type is 'uintmax_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:4]: (portability) %llu in format string (no. 1) requires 'unsigned long long' but the argument type is 'size_t {aka unsigned long long}'.\n"
|
||||
|
@ -2618,7 +2618,7 @@ private:
|
|||
check("void foo(intmax_t im, ptrdiff_t p) {\n"
|
||||
" printf(\"%lld\", im);\n"
|
||||
" printf(\"%lld\", p);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %lld in format string (no. 1) requires 'long long' but the argument type is 'intmax_t {aka signed long long}'.\n"
|
||||
"[test.cpp:3]: (portability) %lld in format string (no. 1) requires 'long long' but the argument type is 'ptrdiff_t {aka signed long long}'.\n", errout.str());
|
||||
|
||||
|
@ -2927,7 +2927,7 @@ private:
|
|||
"void foo() {\n"
|
||||
" printf(\"%zu %Iu %d %f\", v.size(), v.size(), v.size(), v.size());\n"
|
||||
" printf(\"%zu %Iu %d %f\", s.size(), s.size(), s.size(), s.size());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:4]: (portability) %f in format string (no. 4) requires 'double' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:5]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
|
@ -2938,7 +2938,7 @@ private:
|
|||
"void foo() {\n"
|
||||
" printf(\"%zu %Iu %d %f\", v.size(), v.size(), v.size(), v.size());\n"
|
||||
" printf(\"%zu %Iu %d %f\", s.size(), s.size(), s.size(), s.size());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}\n", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:4]: (portability) %f in format string (no. 4) requires 'double' but the argument type is 'std::size_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:5]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long long}'.\n"
|
||||
|
@ -2949,7 +2949,7 @@ private:
|
|||
"void foo() {\n"
|
||||
" printf(\"%zu %Iu %d %f\", v.size(), v.size(), v.size(), v.size());\n"
|
||||
" printf(\"%zu %Iu %d %f\", s.size(), s.size(), s.size(), s.size());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix32);
|
||||
"}\n", false, true, Platform::Type::Unix32);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:4]: (portability) %f in format string (no. 4) requires 'double' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:5]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
|
@ -2960,7 +2960,7 @@ private:
|
|||
"void foo() {\n"
|
||||
" printf(\"%zu %Iu %d %f\", v.size(), v.size(), v.size(), v.size());\n"
|
||||
" printf(\"%zu %Iu %d %f\", s.size(), s.size(), s.size(), s.size());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:4]: (portability) %f in format string (no. 4) requires 'double' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:5]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
|
@ -2971,7 +2971,7 @@ private:
|
|||
"void foo() {\n"
|
||||
" printf(\"%zu %Iu %d %f\", v.size(), v.size(), v.size(), v.size());\n"
|
||||
" printf(\"%zu %Iu %d %f\", s.size(), s.size(), s.size(), s.size());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:4]: (portability) %f in format string (no. 4) requires 'double' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:5]: (portability) %d in format string (no. 3) requires 'int' but the argument type is 'std::size_t {aka unsigned long}'.\n"
|
||||
|
@ -2980,14 +2980,14 @@ private:
|
|||
check("class Fred : public std::vector<int> {} v;\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%d %u %f\", v[0], v[0], v[0]);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'int'.\n"
|
||||
"[test.cpp:3]: (warning) %f in format string (no. 3) requires 'double' but the argument type is 'int'.\n", errout.str());
|
||||
|
||||
check("std::string s;\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%s %p %u %d %f\", s.c_str(), s.c_str(), s.c_str(), s.c_str(), s.c_str());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (warning) %u in format string (no. 3) requires 'unsigned int' but the argument type is 'const char *'.\n"
|
||||
"[test.cpp:3]: (warning) %d in format string (no. 4) requires 'int' but the argument type is 'const char *'.\n"
|
||||
"[test.cpp:3]: (warning) %f in format string (no. 5) requires 'double' but the argument type is 'const char *'.\n", errout.str());
|
||||
|
@ -3003,7 +3003,7 @@ private:
|
|||
" printf(\"%u %u\", array.size(), s);\n"
|
||||
" printf(\"%lu %lu\", array.size(), s);\n"
|
||||
" printf(\"%llu %llu\", array.size(), s);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:8]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'char *'.\n"
|
||||
"[test.cpp:8]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'char *'.\n"
|
||||
"[test.cpp:8]: (warning) %u in format string (no. 3) requires 'unsigned int' but the argument type is 'char *'.\n"
|
||||
|
@ -3027,7 +3027,7 @@ private:
|
|||
"char ca[3];\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%td %zd %d %d %d %d %d %d %d %d %d %d %d\", pt, pt, b, c, sc, uc, s, us, st, pt, pc, cl, ca);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:13]: (portability) %zd in format string (no. 2) requires 'ssize_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
|
||||
"[test.cpp:13]: (portability) %d in format string (no. 9) requires 'int' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:13]: (portability) %d in format string (no. 10) requires 'int' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
|
||||
|
@ -3048,7 +3048,7 @@ private:
|
|||
"char ca[3];\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\", b, c, sc, uc, s, us, st, pt, pc, cl, ca);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:13]: (warning) %ld in format string (no. 1) requires 'long' but the argument type is 'bool'.\n"
|
||||
"[test.cpp:13]: (warning) %ld in format string (no. 2) requires 'long' but the argument type is 'char'.\n"
|
||||
"[test.cpp:13]: (warning) %ld in format string (no. 3) requires 'long' but the argument type is 'signed char'.\n"
|
||||
|
@ -3075,7 +3075,7 @@ private:
|
|||
"char ca[3];\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%td %zd %d %d %d %d %d %d %d %d %d\", ptf(), ptf(), bf(), cf(), scf(), ucf(), sf(), usf(), stf(), ptf(), pcf());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:13]: (portability) %zd in format string (no. 2) requires 'ssize_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
|
||||
"[test.cpp:13]: (portability) %d in format string (no. 9) requires 'int' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:13]: (portability) %d in format string (no. 10) requires 'int' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
|
||||
|
@ -3094,7 +3094,7 @@ private:
|
|||
"char ca[3];\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%ld %ld %ld %ld %ld %ld %ld %ld %ld\", bf(), cf(), scf(), ucf(), sf(), usf(), stf(), ptf(), pcf());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:13]: (warning) %ld in format string (no. 1) requires 'long' but the argument type is 'bool'.\n"
|
||||
"[test.cpp:13]: (warning) %ld in format string (no. 2) requires 'long' but the argument type is 'char'.\n"
|
||||
"[test.cpp:13]: (warning) %ld in format string (no. 3) requires 'long' but the argument type is 'signed char'.\n"
|
||||
|
@ -3114,7 +3114,7 @@ private:
|
|||
" printf(\"%p %d\", b[0], b[0]);\n"
|
||||
" printf(\"%p %d\", c[0], c[0]);\n"
|
||||
" printf(\"%p %d\", s.c_str(), s.c_str());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (portability) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:7]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'const int *'.\n"
|
||||
"[test.cpp:8]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'const struct A *'.\n"
|
||||
|
@ -3127,7 +3127,7 @@ private:
|
|||
" printf(\"%p %d\", a[0].c_str(), a[0].c_str());\n"
|
||||
" printf(\"%c %p\", b[0], b[0]);\n"
|
||||
" printf(\"%c %p\", s[0], s[0]);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, false, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'const char *'.\n"
|
||||
"[test.cpp:6]: (warning) %p in format string (no. 2) requires an address but the argument type is 'char'.\n"
|
||||
"[test.cpp:7]: (warning) %p in format string (no. 2) requires an address but the argument type is 'char'.\n", errout.str());
|
||||
|
@ -3139,28 +3139,28 @@ private:
|
|||
"buffer<int> b;\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%u\", b.size());\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:7]: (portability) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'size_t {aka unsigned long}'.\n", errout.str());
|
||||
|
||||
check("DWORD a;\n"
|
||||
"DWORD_PTR b;\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%u %u\", a, b);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'DWORD {aka unsigned long}'.\n"
|
||||
"[test.cpp:4]: (portability) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'DWORD_PTR {aka unsigned long}'.\n", errout.str());
|
||||
|
||||
check("unsigned long a[] = { 1, 2 };\n"
|
||||
"void foo() {\n"
|
||||
" printf(\"%d %d %x \", a[0], a[0], a[0]);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned long'.\n"
|
||||
"[test.cpp:3]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned long'.\n"
|
||||
"[test.cpp:3]: (warning) %x in format string (no. 3) requires 'unsigned int' but the argument type is 'unsigned long'.\n", errout.str());
|
||||
|
||||
check("void foo (wchar_t c) {\n" // ticket #5051 false positive
|
||||
" printf(\"%c\", c);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win64);
|
||||
"}\n", false, false, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -3336,7 +3336,7 @@ private:
|
|||
|
||||
check("void f() {\n"
|
||||
" printf(\"%lu\", sizeof(char));\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}\n", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %lu in format string (no. 1) requires 'unsigned long' but the argument type is 'size_t {aka unsigned long long}'.\n",
|
||||
errout.str());
|
||||
}
|
||||
|
@ -4124,7 +4124,7 @@ private:
|
|||
" printf(\"%I32d %I32u %I32x\", u32, u32, u32);\n"
|
||||
" printf(\"%I64d %I64u %I64x\", i64, i64, i64);\n"
|
||||
" printf(\"%I64d %I64u %I64x\", u64, u64, u64);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:8]: (portability) %Id in format string (no. 1) requires 'ptrdiff_t' but the argument type is 'size_t {aka unsigned long}'.\n"
|
||||
"[test.cpp:9]: (portability) %Iu in format string (no. 2) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
|
||||
"[test.cpp:9]: (portability) %Ix in format string (no. 3) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long}'.\n"
|
||||
|
@ -4146,7 +4146,7 @@ private:
|
|||
" printf(\"%I32d %I32u %I32x\", u32, u32, u32);\n"
|
||||
" printf(\"%I64d %I64u %I64x\", i64, i64, i64);\n"
|
||||
" printf(\"%I64d %I64u %I64x\", u64, u64, u64);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:8]: (portability) %Id in format string (no. 1) requires 'ptrdiff_t' but the argument type is 'size_t {aka unsigned long long}'.\n"
|
||||
"[test.cpp:9]: (portability) %Iu in format string (no. 2) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long long}'.\n"
|
||||
"[test.cpp:9]: (portability) %Ix in format string (no. 3) requires 'size_t' but the argument type is 'ptrdiff_t {aka signed long long}'.\n"
|
||||
|
@ -4191,23 +4191,23 @@ private:
|
|||
// ticket #5264
|
||||
check("void foo(LPARAM lp, WPARAM wp, LRESULT lr) {\n"
|
||||
" printf(\"%Ix %Ix %Ix\", lp, wp, lr);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}\n", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(LPARAM lp, WPARAM wp, LRESULT lr) {\n"
|
||||
" printf(\"%Ix %Ix %Ix\", lp, wp, lr);\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(UINT32 a, ::UINT32 b, Fred::UINT32 c) {\n"
|
||||
" printf(\"%d %d %d\", a, b, c);\n"
|
||||
"};\n", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"};\n", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %d in format string (no. 1) requires 'int' but the argument type is 'UINT32 {aka unsigned int}'.\n"
|
||||
"[test.cpp:2]: (portability) %d in format string (no. 2) requires 'int' but the argument type is 'UINT32 {aka unsigned int}'.\n", errout.str());
|
||||
|
||||
check("void foo(LPCVOID a, ::LPCVOID b, Fred::LPCVOID c) {\n"
|
||||
" printf(\"%d %d %d\", a, b, c);\n"
|
||||
"};\n", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"};\n", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'const void *'.\n"
|
||||
"[test.cpp:2]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'const void *'.\n", errout.str());
|
||||
|
||||
|
@ -4217,7 +4217,7 @@ private:
|
|||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%zd%i\", s, i);\n"
|
||||
" printf(\"%zu\", s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (portability) %zu in format string (no. 1) requires 'size_t' but the argument type is 'SSIZE_T {aka signed long}'.\n", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4226,7 +4226,7 @@ private:
|
|||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%zd%i\", s, i);\n"
|
||||
" printf(\"%zu\", s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (portability) %zu in format string (no. 1) requires 'size_t' but the argument type is 'SSIZE_T {aka signed long long}'.\n", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4235,7 +4235,7 @@ private:
|
|||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%zd%i\", s, i);\n"
|
||||
" printf(\"%zu\", s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4245,7 +4245,7 @@ private:
|
|||
" printf(\"%zd\", s);\n"
|
||||
" printf(\"%zd%i\", s, i);\n"
|
||||
" printf(\"%zu\", s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:7]: (portability) %zu in format string (no. 1) requires 'size_t' but the argument type is 'SSIZE_T {aka signed long long}'.\n", errout.str());
|
||||
|
||||
}
|
||||
|
@ -4264,7 +4264,7 @@ private:
|
|||
" scanf(\"%I32d %I32u %I32x\", &u32, &u32, &u32);\n"
|
||||
" scanf(\"%I64d %I64u %I64x\", &i64, &i64, &i64);\n"
|
||||
" scanf(\"%I64d %I64u %I64x\", &u64, &u64, &u64);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:8]: (portability) %Id in format string (no. 1) requires 'ptrdiff_t *' but the argument type is 'size_t * {aka unsigned long *}'.\n"
|
||||
"[test.cpp:9]: (portability) %Iu in format string (no. 2) requires 'size_t *' but the argument type is 'ptrdiff_t * {aka signed long *}'.\n"
|
||||
"[test.cpp:9]: (portability) %Ix in format string (no. 3) requires 'size_t *' but the argument type is 'ptrdiff_t * {aka signed long *}'.\n"
|
||||
|
@ -4288,7 +4288,7 @@ private:
|
|||
" scanf(\"%I32d %I32u %I32x\", &u32, &u32, &u32);\n"
|
||||
" scanf(\"%I64d %I64u %I64x\", &i64, &i64, &i64);\n"
|
||||
" scanf(\"%I64d %I64u %I64x\", &u64, &u64, &u64);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:8]: (portability) %Id in format string (no. 1) requires 'ptrdiff_t *' but the argument type is 'size_t * {aka unsigned long long *}'.\n"
|
||||
"[test.cpp:9]: (portability) %Iu in format string (no. 2) requires 'size_t *' but the argument type is 'ptrdiff_t * {aka signed long long *}'.\n"
|
||||
"[test.cpp:9]: (portability) %Ix in format string (no. 3) requires 'size_t *' but the argument type is 'ptrdiff_t * {aka signed long long *}'.\n"
|
||||
|
@ -4338,7 +4338,7 @@ private:
|
|||
" scanf(\"%zd\", &s);\n"
|
||||
" scanf(\"%zd%i\", &s, &i);\n"
|
||||
" scanf(\"%zu\", &s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (portability) %zu in format string (no. 1) requires 'size_t *' but the argument type is 'SSIZE_T * {aka signed long *}'.\n", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4347,7 +4347,7 @@ private:
|
|||
" scanf(\"%zd\", &s);\n"
|
||||
" scanf(\"%zd%i\", &s, &i);\n"
|
||||
" scanf(\"%zu\", &s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (portability) %zu in format string (no. 1) requires 'size_t *' but the argument type is 'SSIZE_T * {aka signed long long *}'.\n", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4356,7 +4356,7 @@ private:
|
|||
" scanf(\"%zd\", &s);\n"
|
||||
" scanf(\"%zd%i\", &s, &i);\n"
|
||||
" scanf(\"%zu\", &s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4366,7 +4366,7 @@ private:
|
|||
" scanf(\"%zd\", &s);\n"
|
||||
" scanf(\"%zd%i\", &s, &i);\n"
|
||||
" scanf(\"%zu\", &s);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win64);
|
||||
"}", false, true, Platform::Type::Win64);
|
||||
ASSERT_EQUALS("[test.cpp:7]: (portability) %zu in format string (no. 1) requires 'size_t *' but the argument type is 'SSIZE_T * {aka signed long long *}'.\n", errout.str());
|
||||
|
||||
}
|
||||
|
@ -4377,7 +4377,7 @@ private:
|
|||
" String string;\n"
|
||||
" string.Format(\"%I32d\", u32);\n"
|
||||
" string.AppendFormat(\"%I32d\", u32);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4385,7 +4385,7 @@ private:
|
|||
" CString string;\n"
|
||||
" string.Format(\"%I32d\", u32);\n"
|
||||
" string.AppendFormat(\"%I32d\", u32);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Unix32);
|
||||
"}", false, true, Platform::Type::Unix32);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4394,7 +4394,7 @@ private:
|
|||
" string.Format(\"%I32d\", u32);\n"
|
||||
" string.AppendFormat(\"%I32d\", u32);\n"
|
||||
" CString::Format(\"%I32d\", u32);\n"
|
||||
"}", false, true, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (portability) %I32d in format string (no. 1) requires '__int32' but the argument type is 'unsigned __int32 {aka unsigned int}'.\n"
|
||||
"[test.cpp:5]: (portability) %I32d in format string (no. 1) requires '__int32' but the argument type is 'unsigned __int32 {aka unsigned int}'.\n"
|
||||
"[test.cpp:6]: (portability) %I32d in format string (no. 1) requires '__int32' but the argument type is 'unsigned __int32 {aka unsigned int}'.\n", errout.str());
|
||||
|
@ -4405,7 +4405,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _tprintf_s(_T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) _tprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4414,7 +4414,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _tprintf_s(_T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) _tprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4423,7 +4423,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" printf_s(\"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) printf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4432,7 +4432,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" wprintf_s(L\"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) wprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4442,7 +4442,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _stprintf_s(str, sizeof(str) / sizeof(TCHAR), _T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) _stprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4452,7 +4452,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _stprintf_s(str, sizeof(str) / sizeof(TCHAR), _T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) _stprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4462,7 +4462,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" sprintf_s(str, sizeof(str), \"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) sprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4472,7 +4472,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" sprintf_s(str, \"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) sprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4482,7 +4482,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" swprintf_s(str, sizeof(str) / sizeof(wchar_t), L\"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) swprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4492,7 +4492,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" swprintf_s(str, L\"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) swprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4502,7 +4502,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _sntprintf_s(str, sizeof(str) / sizeof(TCHAR), _TRUNCATE, _T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) _sntprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4512,7 +4512,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _sntprintf_s(str, sizeof(str) / sizeof(TCHAR), _TRUNCATE, _T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) _sntprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4522,7 +4522,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _snprintf_s(str, sizeof(str), _TRUNCATE, \"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) _snprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4532,7 +4532,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _snwprintf_s(str, sizeof(str) / sizeof(wchar_t), _TRUNCATE, L\"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:5]: (warning) _snwprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4541,7 +4541,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _ftprintf_s(fp, _T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) _ftprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4550,7 +4550,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" _ftprintf_s(fp, _T(\"%d %u\"), u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) _ftprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4559,7 +4559,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" fprintf_s(fp, \"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) fprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4568,7 +4568,7 @@ private:
|
|||
" int i;\n"
|
||||
" unsigned int u;\n"
|
||||
" fwprintf_s(fp, L\"%d %u\", u, i, 0);\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.\n"
|
||||
"[test.cpp:4]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:4]: (warning) fwprintf_s format string requires 2 parameters but 3 are given.\n", errout.str());
|
||||
|
@ -4578,7 +4578,7 @@ private:
|
|||
" const char * const format = \"%15s%17s%17s%17s%17s\";\n"
|
||||
" sprintf_s(lineBuffer, 600, format, \"type\", \"sum\", \"avg\", \"min\", \"max\");\n"
|
||||
" sprintf_s(lineBuffer, format, \"type\", \"sum\", \"avg\", \"min\", \"max\");\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4598,7 +4598,7 @@ private:
|
|||
" sprintf_s(lineBuffer, 100, format1, \"type\", \"sum\", \"avg\", \"min\", i, 0);\n"
|
||||
" sprintf_s(lineBuffer, 100, format2, \"type\", \"sum\", \"avg\", \"min\", i, 0);\n"
|
||||
" sprintf_s(lineBuffer, 100, format3, \"type\", \"sum\", \"avg\", \"min\", i, 0);\n"
|
||||
"}\n", true, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", true, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (warning) %s in format string (no. 5) requires 'char *' but the argument type is 'signed int'.\n"
|
||||
"[test.cpp:6]: (warning) sprintf_s format string requires 5 parameters but 6 are given.\n"
|
||||
"[test.cpp:7]: (warning) %s in format string (no. 5) requires 'char *' but the argument type is 'signed int'.\n"
|
||||
|
@ -4632,7 +4632,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" TCHAR str[10];\n"
|
||||
" _tscanf_s(_T(\"%s %d %u %[a-z]\"), str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) _tscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4642,7 +4642,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" TCHAR str[10];\n"
|
||||
" _tscanf_s(_T(\"%s %d %u %[a-z]\"), str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) _tscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4652,7 +4652,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" char str[10];\n"
|
||||
" scanf_s(\"%s %d %u %[a-z]\", str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) scanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4662,7 +4662,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" wchar_t str[10];\n"
|
||||
" wscanf_s(L\"%s %d %u %[a-z]\", str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) wscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4674,7 +4674,7 @@ private:
|
|||
"}\n",
|
||||
false,
|
||||
false,
|
||||
cppcheck::Platform::Type::Win32A);
|
||||
Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (error) Width 9 given in format string (no. 1) is larger than destination buffer 'str[8]', use %8c to prevent overflowing it.\n", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
|
@ -4683,7 +4683,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" TCHAR str[10];\n"
|
||||
" _stscanf_s(txt, _T(\"%s %d %u %[a-z]\"), str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:6]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:6]: (warning) _stscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4694,7 +4694,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" TCHAR str[10];\n"
|
||||
" _stscanf_s(txt, _T(\"%s %d %u %[a-z]\"), str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:6]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:6]: (warning) _stscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4705,7 +4705,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" char str[10];\n"
|
||||
" sscanf_s(txt, \"%s %d %u %[a-z]\", str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:6]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:6]: (warning) sscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4716,7 +4716,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" wchar_t str[10];\n"
|
||||
" swscanf_s(txt, L\"%s %d %u %[a-z]\", str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:6]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:6]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:6]: (warning) swscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4726,7 +4726,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" TCHAR str[10];\n"
|
||||
" _ftscanf_s(fp, _T(\"%s %d %u %[a-z]\"), str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) _ftscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4736,7 +4736,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" TCHAR str[10];\n"
|
||||
" _ftscanf_s(fp, _T(\"%s %d %u %[a-z]\"), str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) _ftscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4746,7 +4746,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" char str[10];\n"
|
||||
" fscanf_s(fp, \"%s %d %u %[a-z]\", str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}\n", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) fscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4756,7 +4756,7 @@ private:
|
|||
" unsigned int u;\n"
|
||||
" wchar_t str[10];\n"
|
||||
" fwscanf_s(fp, L\"%s %d %u %[a-z]\", str, 10, &u, &i, str, 10, 0)\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (warning) %d in format string (no. 2) requires 'int *' but the argument type is 'unsigned int *'.\n"
|
||||
"[test.cpp:5]: (warning) %u in format string (no. 3) requires 'unsigned int *' but the argument type is 'signed int *'.\n"
|
||||
"[test.cpp:5]: (warning) fwscanf_s format string requires 6 parameters but 7 are given.\n", errout.str());
|
||||
|
@ -4764,7 +4764,7 @@ private:
|
|||
check("void foo() {\n"
|
||||
" WCHAR msStr1[5] = {0};\n"
|
||||
" wscanf_s(L\"%4[^-]\", msStr1, _countof(msStr1));\n"
|
||||
"}\n", false, false, cppcheck::Platform::Type::Win32W);
|
||||
"}\n", false, false, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -4772,13 +4772,13 @@ private:
|
|||
check("void foo(float f) {\n"
|
||||
" QString string;\n"
|
||||
" string.sprintf(\"%d\", f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'float'.\n", errout.str());
|
||||
|
||||
check("void foo(float f) {\n"
|
||||
" QString string;\n"
|
||||
" string = QString::asprintf(\"%d\", f);\n"
|
||||
"}", false, false, cppcheck::Platform::Type::Win32A);
|
||||
"}", false, false, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'float'.\n", errout.str());
|
||||
}
|
||||
|
||||
|
@ -4838,7 +4838,7 @@ private:
|
|||
// 8141
|
||||
check("void f(int i) {\n"
|
||||
" printf(\"%f\", imaxabs(i));\n"
|
||||
"}\n", false, true, cppcheck::Platform::Type::Unix64);
|
||||
"}\n", false, true, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (portability) %f in format string (no. 1) requires 'double' but the argument type is 'intmax_t {aka signed long}'.\n", errout.str());
|
||||
}
|
||||
|
||||
|
|
|
@ -353,7 +353,7 @@ private:
|
|||
|
||||
void checkInterlockedDecrement(const char code[]) {
|
||||
Settings settings;
|
||||
settings.platform.type = cppcheck::Platform::Type::Win32A;
|
||||
settings.platform.type = Platform::Type::Win32A;
|
||||
|
||||
check(code, nullptr, false, true, false, &settings);
|
||||
}
|
||||
|
@ -2159,7 +2159,7 @@ private:
|
|||
"T::T(std::string s) noexcept(true) : m(std::move(s)) {}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
Settings settings1 = settingsBuilder().platform(cppcheck::Platform::Type::Win64).build();
|
||||
Settings settings1 = settingsBuilder().platform(Platform::Type::Win64).build();
|
||||
check("using ui64 = unsigned __int64;\n"
|
||||
"ui64 Test(ui64 one, ui64 two) { return one + two; }\n",
|
||||
/*filename*/ nullptr, /*inconclusive*/ true, /*runSimpleChecks*/ true, /*verbose*/ false, &settings1);
|
||||
|
@ -2304,11 +2304,11 @@ private:
|
|||
"};\n"
|
||||
"void f(X x) {}";
|
||||
|
||||
Settings s32 = settingsBuilder(_settings).platform(cppcheck::Platform::Type::Unix32).build();
|
||||
Settings s32 = settingsBuilder(_settings).platform(Platform::Type::Unix32).build();
|
||||
check(code, &s32);
|
||||
ASSERT_EQUALS("[test.cpp:5]: (performance) Function parameter 'x' should be passed by const reference.\n", errout.str());
|
||||
|
||||
Settings s64 = settingsBuilder(_settings).platform(cppcheck::Platform::Type::Unix64).build();
|
||||
Settings s64 = settingsBuilder(_settings).platform(Platform::Type::Unix64).build();
|
||||
check(code, &s64);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
@ -7926,7 +7926,7 @@ private:
|
|||
ASSERT_EQUALS("[test.cpp:3]: (style) Checking if unsigned expression 'value' is less than zero.\n", errout.str());
|
||||
|
||||
// #9040
|
||||
Settings settings1 = settingsBuilder().platform(cppcheck::Platform::Type::Win64).build();
|
||||
Settings settings1 = settingsBuilder().platform(Platform::Type::Win64).build();
|
||||
check("using BOOL = unsigned;\n"
|
||||
"int i;\n"
|
||||
"bool f() {\n"
|
||||
|
|
|
@ -43,7 +43,7 @@ private:
|
|||
TEST_CASE(default_platform);
|
||||
}
|
||||
|
||||
static bool readPlatform(cppcheck::Platform& platform, const char* xmldata) {
|
||||
static bool readPlatform(Platform& platform, const char* xmldata) {
|
||||
tinyxml2::XMLDocument doc;
|
||||
return (doc.Parse(xmldata) == tinyxml2::XML_SUCCESS) && platform.loadFromXmlDocument(&doc);
|
||||
}
|
||||
|
@ -51,16 +51,16 @@ private:
|
|||
void empty() const {
|
||||
// An empty platform file does not change values, only the type.
|
||||
const char xmldata[] = "<?xml version=\"1.0\"?>\n<platform/>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
// TODO: this should fail - platform files need to be complete
|
||||
TODO_ASSERT(!readPlatform(platform, xmldata));
|
||||
}
|
||||
|
||||
void valid_config_win32a() const {
|
||||
// Verify if native Win32A platform is loaded correctly
|
||||
cppcheck::Platform platform;
|
||||
PLATFORM(platform, cppcheck::Platform::Type::Win32A);
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Win32A, platform.type);
|
||||
Platform platform;
|
||||
PLATFORM(platform, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS(Platform::Type::Win32A, platform.type);
|
||||
ASSERT(platform.isWindows());
|
||||
ASSERT_EQUALS(1, platform.sizeof_bool);
|
||||
ASSERT_EQUALS(2, platform.sizeof_short);
|
||||
|
@ -83,9 +83,9 @@ private:
|
|||
|
||||
void valid_config_unix64() const {
|
||||
// Verify if native Unix64 platform is loaded correctly
|
||||
cppcheck::Platform platform;
|
||||
PLATFORM(platform, cppcheck::Platform::Type::Unix64);
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unix64, platform.type);
|
||||
Platform platform;
|
||||
PLATFORM(platform, Platform::Type::Unix64);
|
||||
ASSERT_EQUALS(Platform::Type::Unix64, platform.type);
|
||||
ASSERT(!platform.isWindows());
|
||||
ASSERT_EQUALS(1, platform.sizeof_bool);
|
||||
ASSERT_EQUALS(2, platform.sizeof_short);
|
||||
|
@ -108,9 +108,9 @@ private:
|
|||
|
||||
void valid_config_win32w() const {
|
||||
// Verify if native Win32W platform is loaded correctly
|
||||
cppcheck::Platform platform;
|
||||
PLATFORM(platform, cppcheck::Platform::Type::Win32W);
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Win32W, platform.type);
|
||||
Platform platform;
|
||||
PLATFORM(platform, Platform::Type::Win32W);
|
||||
ASSERT_EQUALS(Platform::Type::Win32W, platform.type);
|
||||
ASSERT(platform.isWindows());
|
||||
ASSERT_EQUALS(1, platform.sizeof_bool);
|
||||
ASSERT_EQUALS(2, platform.sizeof_short);
|
||||
|
@ -133,9 +133,9 @@ private:
|
|||
|
||||
void valid_config_unix32() const {
|
||||
// Verify if native Unix32 platform is loaded correctly
|
||||
cppcheck::Platform platform;
|
||||
PLATFORM(platform, cppcheck::Platform::Type::Unix32);
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Unix32, platform.type);
|
||||
Platform platform;
|
||||
PLATFORM(platform, Platform::Type::Unix32);
|
||||
ASSERT_EQUALS(Platform::Type::Unix32, platform.type);
|
||||
ASSERT(!platform.isWindows());
|
||||
ASSERT_EQUALS(1, platform.sizeof_bool);
|
||||
ASSERT_EQUALS(2, platform.sizeof_short);
|
||||
|
@ -158,9 +158,9 @@ private:
|
|||
|
||||
void valid_config_win64() const {
|
||||
// Verify if native Win64 platform is loaded correctly
|
||||
cppcheck::Platform platform;
|
||||
PLATFORM(platform, cppcheck::Platform::Type::Win64);
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Win64, platform.type);
|
||||
Platform platform;
|
||||
PLATFORM(platform, Platform::Type::Win64);
|
||||
ASSERT_EQUALS(Platform::Type::Win64, platform.type);
|
||||
ASSERT(platform.isWindows());
|
||||
ASSERT_EQUALS(1, platform.sizeof_bool);
|
||||
ASSERT_EQUALS(2, platform.sizeof_short);
|
||||
|
@ -202,9 +202,9 @@ private:
|
|||
" <wchar_t>2</wchar_t>\n"
|
||||
" </sizeof>\n"
|
||||
" </platform>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
ASSERT(readPlatform(platform, xmldata));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::File, platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::File, platform.type);
|
||||
ASSERT(!platform.isWindows());
|
||||
ASSERT_EQUALS(8, platform.char_bit);
|
||||
ASSERT_EQUALS('u', platform.defaultSign);
|
||||
|
@ -246,9 +246,9 @@ private:
|
|||
" <wchar_t>11</wchar_t>\n"
|
||||
" </sizeof>\n"
|
||||
" </platform>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
ASSERT(readPlatform(platform, xmldata));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::File, platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::File, platform.type);
|
||||
ASSERT(!platform.isWindows());
|
||||
ASSERT_EQUALS(20, platform.char_bit);
|
||||
ASSERT_EQUALS('s', platform.defaultSign);
|
||||
|
@ -290,7 +290,7 @@ private:
|
|||
" <wchar_t1>11</wchar_t1>\n"
|
||||
" </sizeof1>\n"
|
||||
" </platform>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
// TODO: needs to fail - files need to be complete
|
||||
TODO_ASSERT(!readPlatform(platform, xmldata));
|
||||
}
|
||||
|
@ -316,9 +316,9 @@ private:
|
|||
" <wchar_t>0</wchar_t>\n"
|
||||
" </sizeof>\n"
|
||||
" </platform>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
ASSERT(readPlatform(platform, xmldata));
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::File, platform.type);
|
||||
ASSERT_EQUALS(Platform::Type::File, platform.type);
|
||||
ASSERT(!platform.isWindows());
|
||||
ASSERT_EQUALS(0, platform.char_bit);
|
||||
ASSERT_EQUALS('z', platform.defaultSign);
|
||||
|
@ -359,7 +359,7 @@ private:
|
|||
" <wchar_t>2</wchar_t>\n"
|
||||
" </sizeof>\n"
|
||||
" </platform>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
ASSERT(!readPlatform(platform, xmldata));
|
||||
}
|
||||
|
||||
|
@ -384,13 +384,13 @@ private:
|
|||
" <wchar_t></wchar_t>\n"
|
||||
" </sizeof>\n"
|
||||
" </platform>";
|
||||
cppcheck::Platform platform;
|
||||
Platform platform;
|
||||
ASSERT(!readPlatform(platform, xmldata));
|
||||
}
|
||||
|
||||
void default_platform() const {
|
||||
cppcheck::Platform platform;
|
||||
ASSERT_EQUALS(cppcheck::Platform::Type::Native, platform.type);
|
||||
Platform platform;
|
||||
ASSERT_EQUALS(Platform::Type::Native, platform.type);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -480,7 +480,7 @@ private:
|
|||
|
||||
// preprocess code with unix32 platform..
|
||||
{
|
||||
const Settings settings = settingsBuilder().platform(cppcheck::Platform::Type::Unix32).build();
|
||||
const Settings settings = settingsBuilder().platform(Platform::Type::Unix32).build();
|
||||
Preprocessor preprocessor(settings, this);
|
||||
preprocessor.setPlatformInfo(&tokens);
|
||||
ASSERT_EQUALS("\n1", preprocessor.getcode(tokens, "", files, false));
|
||||
|
@ -488,7 +488,7 @@ private:
|
|||
|
||||
// preprocess code with unix64 platform..
|
||||
{
|
||||
const Settings settings = settingsBuilder().platform(cppcheck::Platform::Type::Unix64).build();
|
||||
const Settings settings = settingsBuilder().platform(Platform::Type::Unix64).build();
|
||||
Preprocessor preprocessor(settings, this);
|
||||
preprocessor.setPlatformInfo(&tokens);
|
||||
ASSERT_EQUALS("\n\n\n2", preprocessor.getcode(tokens, "", files, false));
|
||||
|
|
|
@ -307,7 +307,7 @@ private:
|
|||
}
|
||||
|
||||
#define tok(...) tok_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tok_(const char* file, int line, const char code[], bool debugwarnings = false, cppcheck::Platform::Type type = cppcheck::Platform::Type::Native) {
|
||||
std::string tok_(const char* file, int line, const char code[], bool debugwarnings = false, Platform::Type type = Platform::Type::Native) {
|
||||
errout.str("");
|
||||
|
||||
const Settings settings1 = settingsBuilder(settings).library("std.cfg").debugwarnings(debugwarnings).platform(type).build();
|
||||
|
|
|
@ -163,7 +163,7 @@ private:
|
|||
}
|
||||
|
||||
#define tok(...) tok_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tok_(const char* file, int line, const char code[], bool simplify = true, cppcheck::Platform::Type type = cppcheck::Platform::Type::Native) {
|
||||
std::string tok_(const char* file, int line, const char code[], bool simplify = true, Platform::Type type = Platform::Type::Native) {
|
||||
errout.str("");
|
||||
|
||||
const Settings settings = settingsBuilder(settings0).platform(type).build();
|
||||
|
@ -189,7 +189,7 @@ private:
|
|||
}
|
||||
|
||||
#define tokenizeAndStringify(...) tokenizeAndStringify_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tokenizeAndStringify_(const char* file, int linenr, const char code[], bool simplify = false, bool expand = true, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const char* filename = "test.cpp", bool cpp11 = true) {
|
||||
std::string tokenizeAndStringify_(const char* file, int linenr, const char code[], bool simplify = false, bool expand = true, Platform::Type platform = Platform::Type::Native, const char* filename = "test.cpp", bool cpp11 = true) {
|
||||
errout.str("");
|
||||
|
||||
const Settings settings = settingsBuilder(settings1).debugwarnings().platform(platform).cpp(cpp11 ? Standards::CPP11 : Standards::CPP03).build();
|
||||
|
@ -252,10 +252,10 @@ private:
|
|||
ASSERT_EQUALS(tok(code2), tok(code1));
|
||||
|
||||
const char code3[] = "x = L\"1\" TEXT(\"2\") L\"3\";";
|
||||
ASSERT_EQUALS("x = L\"123\" ;", tok(code3, false, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS("x = L\"123\" ;", tok(code3, false, Platform::Type::Win64));
|
||||
|
||||
const char code4[] = "x = TEXT(\"1\") L\"2\";";
|
||||
ASSERT_EQUALS("x = L\"1\" L\"2\" ;", tok(code4, false, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS("x = L\"1\" L\"2\" ;", tok(code4, false, Platform::Type::Win64));
|
||||
}
|
||||
|
||||
void combine_wstrings() {
|
||||
|
@ -1300,12 +1300,12 @@ private:
|
|||
ASSERT_EQUALS("int f ( ) ;", tok("int __far __syscall f();"));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int __far __pascal f();"));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int __far __fortran f();"));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int WINAPI f();", true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int APIENTRY f();", true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int CALLBACK f();", true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int WINAPI f();", true, Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int APIENTRY f();", true, Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("int f ( ) ;", tok("int CALLBACK f();", true, Platform::Type::Win32A));
|
||||
|
||||
// don't simplify Microsoft defines in unix code (#7554)
|
||||
ASSERT_EQUALS("enum E { CALLBACK } ;", tok("enum E { CALLBACK } ;", true, cppcheck::Platform::Type::Unix32));
|
||||
ASSERT_EQUALS("enum E { CALLBACK } ;", tok("enum E { CALLBACK } ;", true, Platform::Type::Unix32));
|
||||
}
|
||||
|
||||
void simplifyAttribute() {
|
||||
|
@ -2033,7 +2033,7 @@ private:
|
|||
"strcpy ( a , \"hello\" ) ;\n"
|
||||
"strcat ( a , \"!\" ) ;\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -2129,7 +2129,7 @@ private:
|
|||
"cin >> x ;\n"
|
||||
"return x ;\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Platform::Type::Native, "test.cpp"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2143,7 +2143,7 @@ private:
|
|||
"int x ; x = 0 ;\n"
|
||||
"cin >> std :: hex >> x ;\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Platform::Type::Native, "test.cpp"));
|
||||
}
|
||||
|
||||
void simplifyKnownVariables48() {
|
||||
|
@ -2156,7 +2156,7 @@ private:
|
|||
"int i ;\n"
|
||||
"for ( i = 0 ; ( i < sz ) && ( sz > 3 ) ; ++ i ) { }\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void simplifyKnownVariables49() { // #3691
|
||||
|
@ -2172,7 +2172,7 @@ private:
|
|||
"case 2 : ; x = sz ; break ;\n"
|
||||
"}\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void simplifyKnownVariables50() { // #4066
|
||||
|
|
|
@ -228,7 +228,7 @@ private:
|
|||
}
|
||||
|
||||
#define tok(...) tok_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tok_(const char* file, int line, const char code[], bool simplify = true, cppcheck::Platform::Type type = cppcheck::Platform::Type::Native, bool debugwarnings = true) {
|
||||
std::string tok_(const char* file, int line, const char code[], bool simplify = true, Platform::Type type = Platform::Type::Native, bool debugwarnings = true) {
|
||||
errout.str("");
|
||||
|
||||
// show warnings about unhandled typedef
|
||||
|
@ -788,7 +788,7 @@ private:
|
|||
"};";
|
||||
|
||||
// Tokenize and check output..
|
||||
TODO_ASSERT_THROW(tok(code, true, cppcheck::Platform::Type::Native, false), InternalError); // TODO: Do not throw exception
|
||||
TODO_ASSERT_THROW(tok(code, true, Platform::Type::Native, false), InternalError); // TODO: Do not throw exception
|
||||
//ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -1876,7 +1876,7 @@ private:
|
|||
|
||||
// The expected tokens..
|
||||
const char expected2[] = "void f ( ) { char a [ 256 ] = { 0 } ; char b [ 256 ] = { 0 } ; }";
|
||||
ASSERT_EQUALS(expected2, tok(code2, false, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected2, tok(code2, false, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
const char code3[] = "typedef char TString[256];\n"
|
||||
|
@ -1887,7 +1887,7 @@ private:
|
|||
|
||||
// The expected tokens..
|
||||
const char expected3[] = "void f ( ) { char a [ 256 ] ; a = \"\" ; char b [ 256 ] ; b = \"\" ; }";
|
||||
ASSERT_EQUALS(expected3, tok(code3, false, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected3, tok(code3, false, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
const char code4[] = "typedef char TString[256];\n"
|
||||
|
@ -1898,7 +1898,7 @@ private:
|
|||
|
||||
// The expected tokens..
|
||||
const char expected4[] = "void f ( ) { char a [ 256 ] ; a = \"1234\" ; char b [ 256 ] ; b = \"5678\" ; }";
|
||||
ASSERT_EQUALS(expected4, tok(code4, false, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected4, tok(code4, false, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -1924,7 +1924,7 @@ private:
|
|||
" Foo b(0);\n"
|
||||
" return b > Foo(10);\n"
|
||||
"}";
|
||||
const std::string actual(tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
const std::string actual(tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("int main ( ) { BAR < int > b ( 0 ) ; return b > BAR < int > ( 10 ) ; }", actual);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
@ -2082,7 +2082,7 @@ private:
|
|||
|
||||
void simplifyTypedef75() { // ticket #2426
|
||||
const char code[] = "typedef _Packed struct S { long l; };";
|
||||
ASSERT_EQUALS(";", tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(";", tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -2404,7 +2404,7 @@ private:
|
|||
"public: "
|
||||
"expression_error :: error_code ( * f ) ( void * , const char * , expression_space ) ; "
|
||||
"} ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -2568,7 +2568,7 @@ private:
|
|||
"} ; "
|
||||
"} "
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3046,7 +3046,7 @@ private:
|
|||
"void A :: f ( external :: ns1 :: B<1> ) { } "
|
||||
"} "
|
||||
"struct external :: ns1 :: B<1> { } ;";
|
||||
ASSERT_EQUALS(exp, tok(code, true, cppcheck::Platform::Type::Native, true));
|
||||
ASSERT_EQUALS(exp, tok(code, true, Platform::Type::Native, true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
{
|
||||
|
@ -3079,7 +3079,7 @@ private:
|
|||
"void A :: f ( external :: ns1 :: B<1> ) { } "
|
||||
"} "
|
||||
"struct external :: ns1 :: B<1> { } ;";
|
||||
ASSERT_EQUALS(exp, tok(code, true, cppcheck::Platform::Type::Native, true));
|
||||
ASSERT_EQUALS(exp, tok(code, true, Platform::Type::Native, true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
{
|
||||
|
@ -3129,7 +3129,7 @@ private:
|
|||
"void A :: f ( V ) { } "
|
||||
"} "
|
||||
"struct external :: ns1 :: B<1> { } ;";
|
||||
TODO_ASSERT_EQUALS(exp, act, tok(code, true, cppcheck::Platform::Type::Native, true));
|
||||
TODO_ASSERT_EQUALS(exp, act, tok(code, true, Platform::Type::Native, true));
|
||||
TODO_ASSERT_EQUALS("", "[test.cpp:14]: (debug) Executable scope 'f' with unknown function.\n", errout.str());
|
||||
}
|
||||
{
|
||||
|
@ -3178,7 +3178,7 @@ private:
|
|||
"namespace ns { "
|
||||
"void A :: f ( V ) { } "
|
||||
"}";
|
||||
TODO_ASSERT_EQUALS(exp, act, tok(code, true, cppcheck::Platform::Type::Native, true));
|
||||
TODO_ASSERT_EQUALS(exp, act, tok(code, true, Platform::Type::Native, true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
{
|
||||
|
@ -3208,7 +3208,7 @@ private:
|
|||
"void A :: f ( external :: B<1> ) { } "
|
||||
"} "
|
||||
"struct external :: B<1> { } ;";
|
||||
ASSERT_EQUALS(exp, tok(code, true, cppcheck::Platform::Type::Native, true));
|
||||
ASSERT_EQUALS(exp, tok(code, true, Platform::Type::Native, true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
{
|
||||
|
@ -3236,7 +3236,7 @@ private:
|
|||
"void A :: f ( B<1> ) { } "
|
||||
"} "
|
||||
"struct B<1> { } ;";
|
||||
ASSERT_EQUALS(exp, tok(code, true, cppcheck::Platform::Type::Native, true));
|
||||
ASSERT_EQUALS(exp, tok(code, true, Platform::Type::Native, true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
}
|
||||
|
@ -3654,7 +3654,7 @@ private:
|
|||
"C ( * f5 ) ( ) ; "
|
||||
"C ( * f6 ) ( ) ; "
|
||||
"C ( * f7 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3683,7 +3683,7 @@ private:
|
|||
"const C ( * f5 ) ( ) ; "
|
||||
"const C ( * f6 ) ( ) ; "
|
||||
"const C ( * f7 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3711,7 +3711,7 @@ private:
|
|||
"const C ( * f5 ) ( ) ; "
|
||||
"const C ( * f6 ) ( ) ; "
|
||||
"const C ( * f7 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3739,7 +3739,7 @@ private:
|
|||
"C * ( * f5 ) ( ) ; "
|
||||
"C * ( * f6 ) ( ) ; "
|
||||
"C * ( * f7 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3767,7 +3767,7 @@ private:
|
|||
"const C * ( * f5 ) ( ) ; "
|
||||
"const C * ( * f6 ) ( ) ; "
|
||||
"const C * ( * f7 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3796,7 +3796,7 @@ private:
|
|||
"const C * ( * f5 ) ( ) ; "
|
||||
"const C * ( * f6 ) ( ) ; "
|
||||
"const C * ( * f7 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
}
|
||||
|
@ -3941,7 +3941,7 @@ private:
|
|||
"B :: C ( * f2 ) ( ) ; "
|
||||
"B :: C ( * f3 ) ( ) ; "
|
||||
"B :: C ( * f4 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -3979,7 +3979,7 @@ private:
|
|||
"A :: B :: C ( * f2 ) ( ) ; "
|
||||
"A :: B :: C ( * f3 ) ( ) ; "
|
||||
"A :: B :: C ( * f4 ) ( ) ;";
|
||||
ASSERT_EQUALS(expected, tok(code, true, cppcheck::Platform::Type::Native, false));
|
||||
ASSERT_EQUALS(expected, tok(code, true, Platform::Type::Native, false));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ private:
|
|||
}
|
||||
|
||||
#define tok(...) tok_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tok_(const char* file, int line, const char code[], cppcheck::Platform::Type type = cppcheck::Platform::Type::Native, bool debugwarnings = true, bool preprocess = false) {
|
||||
std::string tok_(const char* file, int line, const char code[], Platform::Type type = Platform::Type::Native, bool debugwarnings = true, bool preprocess = false) {
|
||||
errout.str("");
|
||||
|
||||
const Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).debugwarnings(debugwarnings).platform(type).build();
|
||||
|
@ -406,7 +406,7 @@ private:
|
|||
" FP_M(val);"
|
||||
"};";
|
||||
|
||||
TODO_ASSERT_THROW(tok(code, cppcheck::Platform::Type::Native, false), InternalError); // TODO: Do not throw AST validation exception
|
||||
TODO_ASSERT_THROW(tok(code, Platform::Type::Native, false), InternalError); // TODO: Do not throw AST validation exception
|
||||
//ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -670,7 +670,7 @@ private:
|
|||
" T* p{ new T };\n"
|
||||
"}\n";
|
||||
const char expected[] = "void f ( ) { int * p { new int } ; }";
|
||||
ASSERT_EQUALS(expected, tok(code, cppcheck::Platform::Type::Native, /*debugwarnings*/ true));
|
||||
ASSERT_EQUALS(expected, tok(code, Platform::Type::Native, /*debugwarnings*/ true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -678,7 +678,7 @@ private:
|
|||
const char code[] = "using T = int*;\n"
|
||||
"void f(T = T()) {}\n";
|
||||
const char expected[] = "void f ( int * = ( int * ) 0 ) { }";
|
||||
ASSERT_EQUALS(expected, tok(code, cppcheck::Platform::Type::Native, /*debugwarnings*/ true));
|
||||
ASSERT_EQUALS(expected, tok(code, Platform::Type::Native, /*debugwarnings*/ true));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -732,11 +732,11 @@ private:
|
|||
|
||||
const char exp[] = "int i ;";
|
||||
|
||||
ASSERT_EQUALS(exp, tok(code, cppcheck::Platform::Type::Unix32));
|
||||
ASSERT_EQUALS(exp, tok(code, cppcheck::Platform::Type::Unix64));
|
||||
ASSERT_EQUALS(exp, tok(code, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS(exp, tok(code, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS(exp, tok(code, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS(exp, tok(code, Platform::Type::Unix32));
|
||||
ASSERT_EQUALS(exp, tok(code, Platform::Type::Unix64));
|
||||
ASSERT_EQUALS(exp, tok(code, Platform::Type::Win32A));
|
||||
ASSERT_EQUALS(exp, tok(code, Platform::Type::Win32W));
|
||||
ASSERT_EQUALS(exp, tok(code, Platform::Type::Win64));
|
||||
}
|
||||
|
||||
void simplifyUsing9042() {
|
||||
|
@ -756,7 +756,7 @@ private:
|
|||
"} ; "
|
||||
"template < class T > class s { } ;";
|
||||
|
||||
ASSERT_EQUALS(exp, tok(code, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS(exp, tok(code, Platform::Type::Win64));
|
||||
}
|
||||
|
||||
void simplifyUsing9191() {
|
||||
|
@ -1389,7 +1389,7 @@ private:
|
|||
"STAMP(A, int);\n"
|
||||
"STAMP(B, A);\n"
|
||||
"STAMP(C, B);\n";
|
||||
tok(code, cppcheck::Platform::Type::Native, /*debugwarnings*/ true, /*preprocess*/ true);
|
||||
tok(code, Platform::Type::Native, /*debugwarnings*/ true, /*preprocess*/ true);
|
||||
ASSERT(startsWith(errout.str(), "[test.cpp:6]: (debug) Failed to parse 'using C = S < S < S < int"));
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ private:
|
|||
const Token* vartok{nullptr};
|
||||
const Token* typetok{nullptr};
|
||||
Settings settings1 = settingsBuilder().library("std.cfg").build();
|
||||
const Settings settings2 = settingsBuilder().platform(cppcheck::Platform::Type::Unspecified).build();
|
||||
const Settings settings2 = settingsBuilder().platform(Platform::Type::Unspecified).build();
|
||||
|
||||
void reset() {
|
||||
vartok = nullptr;
|
||||
|
@ -8516,7 +8516,7 @@ private:
|
|||
}
|
||||
{
|
||||
// PodType
|
||||
Settings settingsWin64 = settingsBuilder().platform(cppcheck::Platform::Type::Win64).build();
|
||||
Settings settingsWin64 = settingsBuilder().platform(Platform::Type::Win64).build();
|
||||
const Library::PodType u32 = { 4, 'u' };
|
||||
const Library::PodType podtype2 = { 0, 'u', Library::PodType::Type::INT };
|
||||
settingsWin64.library.mPodTypes["u32"] = u32;
|
||||
|
@ -8537,7 +8537,7 @@ private:
|
|||
}
|
||||
{
|
||||
// PlatformType
|
||||
Settings settingsUnix32 = settingsBuilder().platform(cppcheck::Platform::Type::Unix32).build();
|
||||
Settings settingsUnix32 = settingsBuilder().platform(Platform::Type::Unix32).build();
|
||||
Library::PlatformType s32;
|
||||
s32.mType = "int";
|
||||
settingsUnix32.library.mPlatforms[settingsUnix32.platform.toString()].mPlatformTypes["s32"] = s32;
|
||||
|
@ -8547,7 +8547,7 @@ private:
|
|||
}
|
||||
{
|
||||
// PlatformType - wchar_t
|
||||
Settings settingsWin64 = settingsBuilder().platform(cppcheck::Platform::Type::Win64).build();
|
||||
Settings settingsWin64 = settingsBuilder().platform(Platform::Type::Win64).build();
|
||||
Library::PlatformType lpctstr;
|
||||
lpctstr.mType = "wchar_t";
|
||||
settingsWin64.library.mPlatforms[settingsWin64.platform.toString()].mPlatformTypes["LPCTSTR"] = lpctstr;
|
||||
|
|
|
@ -449,7 +449,7 @@ private:
|
|||
}
|
||||
|
||||
#define tokenizeAndStringify(...) tokenizeAndStringify_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tokenizeAndStringify_(const char* file, int linenr, const char code[], bool expand = true, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const char* filename = "test.cpp", Standards::cppstd_t std = Standards::CPP11) {
|
||||
std::string tokenizeAndStringify_(const char* file, int linenr, const char code[], bool expand = true, Platform::Type platform = Platform::Type::Native, const char* filename = "test.cpp", Standards::cppstd_t std = Standards::CPP11) {
|
||||
errout.str("");
|
||||
|
||||
const Settings settings = settingsBuilder(settings1).debugwarnings().cpp(std).platform(platform).build();
|
||||
|
@ -475,7 +475,7 @@ private:
|
|||
}
|
||||
|
||||
#define tokenizeAndStringifyWindows(...) tokenizeAndStringifyWindows_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
std::string tokenizeAndStringifyWindows_(const char* file, int linenr, const char code[], bool expand = true, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const char* filename = "test.cpp", bool cpp11 = true) {
|
||||
std::string tokenizeAndStringifyWindows_(const char* file, int linenr, const char code[], bool expand = true, Platform::Type platform = Platform::Type::Native, const char* filename = "test.cpp", bool cpp11 = true) {
|
||||
errout.str("");
|
||||
|
||||
const Settings settings = settingsBuilder(settings_windows).debugwarnings().cpp(cpp11 ? Standards::CPP11 : Standards::CPP03).platform(platform).build();
|
||||
|
@ -807,11 +807,11 @@ private:
|
|||
|
||||
void validate() {
|
||||
// C++ code in C file
|
||||
ASSERT_THROW(tokenizeAndStringify(";using namespace std;",false,cppcheck::Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify(";std::map<int,int> m;",false,cppcheck::Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify(";template<class T> class X { };",false,cppcheck::Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify("int X<Y>() {};",false,cppcheck::Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify("void foo(int i) { reinterpret_cast<char>(i) };",false,cppcheck::Platform::Type::Native,"test.h"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify(";using namespace std;",false,Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify(";std::map<int,int> m;",false,Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify(";template<class T> class X { };",false,Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify("int X<Y>() {};",false,Platform::Type::Native,"test.c"), InternalError);
|
||||
ASSERT_THROW(tokenizeAndStringify("void foo(int i) { reinterpret_cast<char>(i) };",false,Platform::Type::Native,"test.h"), InternalError);
|
||||
}
|
||||
|
||||
void objectiveC() {
|
||||
|
@ -1768,7 +1768,7 @@ private:
|
|||
const char code[] = "struct foo {\n"
|
||||
" void operator delete(void *obj, size_t sz);\n"
|
||||
"}\n";
|
||||
const std::string actual(tokenizeAndStringify(code, true, cppcheck::Platform::Type::Win32A));
|
||||
const std::string actual(tokenizeAndStringify(code, true, Platform::Type::Win32A));
|
||||
|
||||
const char expected[] = "struct foo {\n"
|
||||
"void operatordelete ( void * obj , unsigned long sz ) ;\n"
|
||||
|
@ -2268,7 +2268,7 @@ private:
|
|||
|
||||
void vardecl14() {
|
||||
const char code[] = "::std::tr1::shared_ptr<int> pNum1, pNum2;\n";
|
||||
ASSERT_EQUALS(":: std :: tr1 :: shared_ptr < int > pNum1 ; :: std :: tr1 :: shared_ptr < int > pNum2 ;", tokenizeAndStringify(code, false, cppcheck::Platform::Type::Native, "test.cpp", Standards::CPP03));
|
||||
ASSERT_EQUALS(":: std :: tr1 :: shared_ptr < int > pNum1 ; :: std :: tr1 :: shared_ptr < int > pNum2 ;", tokenizeAndStringify(code, false, Platform::Type::Native, "test.cpp", Standards::CPP03));
|
||||
}
|
||||
|
||||
void vardecl15() {
|
||||
|
@ -2473,7 +2473,7 @@ private:
|
|||
void vardecl26() { // #5907
|
||||
const char code[] = "extern int *new, obj, player;";
|
||||
const char expected[] = "extern int * new ; extern int obj ; extern int player ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code));
|
||||
}
|
||||
|
||||
|
@ -2484,7 +2484,7 @@ private:
|
|||
" return 0;\n"
|
||||
" return 0;\n"
|
||||
"}";
|
||||
tokenizeAndStringify(code, /*expand=*/ true, cppcheck::Platform::Type::Native, "test.c");
|
||||
tokenizeAndStringify(code, /*expand=*/ true, Platform::Type::Native, "test.c");
|
||||
}
|
||||
|
||||
void vardecl28() {
|
||||
|
@ -2496,7 +2496,7 @@ private:
|
|||
"const unsigned short x ; x = 1 ;\n"
|
||||
"return x ;\n"
|
||||
"}",
|
||||
tokenizeAndStringify(code, /*expand=*/ true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
tokenizeAndStringify(code, /*expand=*/ true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void vardecl29() { // #9282
|
||||
|
@ -2516,9 +2516,9 @@ private:
|
|||
void vardecl30() {
|
||||
const char code[] = "struct D {} const d;";
|
||||
ASSERT_EQUALS("struct D { } ; struct D const d ;",
|
||||
tokenizeAndStringify(code, true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
tokenizeAndStringify(code, true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("struct D { } ; struct D const d ;",
|
||||
tokenizeAndStringify(code, true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
tokenizeAndStringify(code, true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void vardecl31() {
|
||||
|
@ -2589,15 +2589,15 @@ private:
|
|||
}
|
||||
|
||||
void implicitIntConst() {
|
||||
ASSERT_EQUALS("const int x ;", tokenizeAndStringify("const x;", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int * x ;", tokenizeAndStringify("const *x;", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int * f ( ) ;", tokenizeAndStringify("const *f();", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int x ;", tokenizeAndStringify("const x;", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int * x ;", tokenizeAndStringify("const *x;", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int * f ( ) ;", tokenizeAndStringify("const *f();", true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void implicitIntExtern() {
|
||||
ASSERT_EQUALS("extern int x ;", tokenizeAndStringify("extern x;", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("extern int * x ;", tokenizeAndStringify("extern *x;", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int * f ( ) ;", tokenizeAndStringify("const *f();", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("extern int x ;", tokenizeAndStringify("extern x;", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("extern int * x ;", tokenizeAndStringify("extern *x;", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("const int * f ( ) ;", tokenizeAndStringify("const *f();", true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3638,15 +3638,15 @@ private:
|
|||
// Pointer to standard type
|
||||
ASSERT_EQUALS("char buf [ 100 ] ; readlink ( path , buf , 99 ) ;",
|
||||
tokenizeAndStringify("char buf[100] ; readlink(path, &buf[0], 99);",
|
||||
true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
true, Platform::Type::Native, "test.c"));
|
||||
|
||||
ASSERT_EQUALS("void foo ( char * c ) { if ( 1 == ( 1 & c [ 0 ] ) ) { } }",
|
||||
tokenizeAndStringify("void foo(char *c) { if (1==(1 & c[0])) {} }",
|
||||
true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
true, Platform::Type::Native, "test.c"));
|
||||
|
||||
// Simplification of unknown type - C only
|
||||
ASSERT_EQUALS("foo data [ 100 ] ; something ( foo ) ;",
|
||||
tokenizeAndStringify("foo data[100]; something(&foo[0]);", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
tokenizeAndStringify("foo data[100]; something(&foo[0]);", true, Platform::Type::Native, "test.c"));
|
||||
|
||||
// C++: No pointer simplification
|
||||
ASSERT_EQUALS("foo data [ 100 ] ; something ( & foo [ 0 ] ) ;",
|
||||
|
@ -4399,16 +4399,16 @@ private:
|
|||
ASSERT_EQUALS("struct A { long x ; } ;", tokenizeAndStringify(code5));
|
||||
|
||||
const char code6[] = "struct A { __int8 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { char x ; } ;", tokenizeAndStringifyWindows(code6, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { char x ; } ;", tokenizeAndStringifyWindows(code6, true, Platform::Type::Win32A));
|
||||
|
||||
const char code7[] = "struct A { __int16 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { short x ; } ;", tokenizeAndStringifyWindows(code7, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { short x ; } ;", tokenizeAndStringifyWindows(code7, true, Platform::Type::Win32A));
|
||||
|
||||
const char code8[] = "struct A { __int32 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { int x ; } ;", tokenizeAndStringifyWindows(code8, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { int x ; } ;", tokenizeAndStringifyWindows(code8, true, Platform::Type::Win32A));
|
||||
|
||||
const char code9[] = "struct A { __int64 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { long long x ; } ;", tokenizeAndStringifyWindows(code9, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { long long x ; } ;", tokenizeAndStringifyWindows(code9, true, Platform::Type::Win32A));
|
||||
|
||||
const char code10[] = "struct A { unsigned char x : 3; };";
|
||||
ASSERT_EQUALS("struct A { unsigned char x ; } ;", tokenizeAndStringify(code10));
|
||||
|
@ -4423,16 +4423,16 @@ private:
|
|||
ASSERT_EQUALS("struct A { unsigned long x ; } ;", tokenizeAndStringify(code13));
|
||||
|
||||
const char code14[] = "struct A { unsigned __int8 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { unsigned char x ; } ;", tokenizeAndStringifyWindows(code14, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { unsigned char x ; } ;", tokenizeAndStringifyWindows(code14, true, Platform::Type::Win32A));
|
||||
|
||||
const char code15[] = "struct A { unsigned __int16 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { unsigned short x ; } ;", tokenizeAndStringifyWindows(code15, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { unsigned short x ; } ;", tokenizeAndStringifyWindows(code15, true, Platform::Type::Win32A));
|
||||
|
||||
const char code16[] = "struct A { unsigned __int32 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { unsigned int x ; } ;", tokenizeAndStringifyWindows(code16, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { unsigned int x ; } ;", tokenizeAndStringifyWindows(code16, true, Platform::Type::Win32A));
|
||||
|
||||
const char code17[] = "struct A { unsigned __int64 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { unsigned long long x ; } ;", tokenizeAndStringifyWindows(code17, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { unsigned long long x ; } ;", tokenizeAndStringifyWindows(code17, true, Platform::Type::Win32A));
|
||||
|
||||
const char code18[] = "struct A { signed char x : 3; };";
|
||||
ASSERT_EQUALS("struct A { signed char x ; } ;", tokenizeAndStringify(code18));
|
||||
|
@ -4447,16 +4447,16 @@ private:
|
|||
ASSERT_EQUALS("struct A { signed long x ; } ;", tokenizeAndStringifyWindows(code21));
|
||||
|
||||
const char code22[] = "struct A { signed __int8 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { signed char x ; } ;", tokenizeAndStringifyWindows(code22, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { signed char x ; } ;", tokenizeAndStringifyWindows(code22, true, Platform::Type::Win32A));
|
||||
|
||||
const char code23[] = "struct A { signed __int16 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { signed short x ; } ;", tokenizeAndStringifyWindows(code23, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { signed short x ; } ;", tokenizeAndStringifyWindows(code23, true, Platform::Type::Win32A));
|
||||
|
||||
const char code24[] = "struct A { signed __int32 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { signed int x ; } ;", tokenizeAndStringifyWindows(code24, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { signed int x ; } ;", tokenizeAndStringifyWindows(code24, true, Platform::Type::Win32A));
|
||||
|
||||
const char code25[] = "struct A { signed __int64 x : 3; };";
|
||||
ASSERT_EQUALS("struct A { signed long long x ; } ;", tokenizeAndStringifyWindows(code25, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("struct A { signed long long x ; } ;", tokenizeAndStringifyWindows(code25, true, Platform::Type::Win32A));
|
||||
}
|
||||
|
||||
void bitfields2() {
|
||||
|
@ -4781,72 +4781,72 @@ private:
|
|||
|
||||
void microsoftMemory() {
|
||||
const char code1a[] = "void foo() { int a[10], b[10]; CopyMemory(a, b, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcpy ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code1a,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcpy ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code1a,true,Platform::Type::Win32A));
|
||||
|
||||
const char code1b[] = "void foo() { int a[10], b[10]; RtlCopyMemory(a, b, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcpy ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code1b,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcpy ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code1b,true,Platform::Type::Win32A));
|
||||
|
||||
const char code1c[] = "void foo() { int a[10], b[10]; RtlCopyBytes(a, b, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcpy ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code1c,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcpy ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code1c,true,Platform::Type::Win32A));
|
||||
|
||||
const char code2a[] = "void foo() { int a[10]; FillMemory(a, sizeof(a), 255); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 255 , sizeof ( a ) ) ; }", tokenizeAndStringify(code2a,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 255 , sizeof ( a ) ) ; }", tokenizeAndStringify(code2a,true,Platform::Type::Win32A));
|
||||
const char code2b[] = "void foo() { int a[10]; RtlFillMemory(a, sizeof(a), 255); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 255 , sizeof ( a ) ) ; }", tokenizeAndStringify(code2b,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 255 , sizeof ( a ) ) ; }", tokenizeAndStringify(code2b,true,Platform::Type::Win32A));
|
||||
const char code2c[] = "void foo() { int a[10]; RtlFillBytes(a, sizeof(a), 255); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 255 , sizeof ( a ) ) ; }", tokenizeAndStringify(code2c,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 255 , sizeof ( a ) ) ; }", tokenizeAndStringify(code2c,true,Platform::Type::Win32A));
|
||||
|
||||
const char code3a[] = "void foo() { int a[10], b[10]; MoveMemory(a, b, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memmove ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code3a,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memmove ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code3a,true,Platform::Type::Win32A));
|
||||
const char code3b[] = "void foo() { int a[10], b[10]; RtlMoveMemory(a, b, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memmove ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code3b,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memmove ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code3b,true,Platform::Type::Win32A));
|
||||
|
||||
const char code4a[] = "void foo() { int a[10]; ZeroMemory(a, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4a,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4a,true,Platform::Type::Win32A));
|
||||
const char code4b[] = "void foo() { int a[10]; RtlZeroMemory(a, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4b,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4b,true,Platform::Type::Win32A));
|
||||
const char code4c[] = "void foo() { int a[10]; RtlZeroBytes(a, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4c,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4c,true,Platform::Type::Win32A));
|
||||
const char code4d[] = "void foo() { int a[10]; RtlSecureZeroMemory(a, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4d,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; memset ( a , 0 , sizeof ( a ) ) ; }", tokenizeAndStringify(code4d,true,Platform::Type::Win32A));
|
||||
|
||||
const char code5[] = "void foo() { int a[10], b[10]; RtlCompareMemory(a, b, sizeof(a)); }";
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcmp ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code5,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { int a [ 10 ] ; int b [ 10 ] ; memcmp ( a , b , sizeof ( a ) ) ; }", tokenizeAndStringify(code5,true,Platform::Type::Win32A));
|
||||
|
||||
const char code6[] = "void foo() { ZeroMemory(f(1, g(a, b)), h(i, j(0, 1))); }";
|
||||
ASSERT_EQUALS("void foo ( ) { memset ( f ( 1 , g ( a , b ) ) , 0 , h ( i , j ( 0 , 1 ) ) ) ; }", tokenizeAndStringify(code6,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { memset ( f ( 1 , g ( a , b ) ) , 0 , h ( i , j ( 0 , 1 ) ) ) ; }", tokenizeAndStringify(code6,true,Platform::Type::Win32A));
|
||||
|
||||
const char code7[] = "void foo() { FillMemory(f(1, g(a, b)), h(i, j(0, 1)), 255); }";
|
||||
ASSERT_EQUALS("void foo ( ) { memset ( f ( 1 , g ( a , b ) ) , 255 , h ( i , j ( 0 , 1 ) ) ) ; }", tokenizeAndStringify(code7,true,cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { memset ( f ( 1 , g ( a , b ) ) , 255 , h ( i , j ( 0 , 1 ) ) ) ; }", tokenizeAndStringify(code7,true,Platform::Type::Win32A));
|
||||
}
|
||||
|
||||
void microsoftString() {
|
||||
const char code1a[] = "void foo() { _tprintf (_T(\"test\") _T(\"1\")); }";
|
||||
ASSERT_EQUALS("void foo ( ) { printf ( \"test1\" ) ; }", tokenizeAndStringify(code1a, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { printf ( \"test1\" ) ; }", tokenizeAndStringify(code1a, true, Platform::Type::Win32A));
|
||||
const char code1b[] = "void foo() { _tprintf (_TEXT(\"test\") _TEXT(\"2\")); }";
|
||||
ASSERT_EQUALS("void foo ( ) { printf ( \"test2\" ) ; }", tokenizeAndStringify(code1b, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { printf ( \"test2\" ) ; }", tokenizeAndStringify(code1b, true, Platform::Type::Win32A));
|
||||
const char code1c[] = "void foo() { _tprintf (TEXT(\"test\") TEXT(\"3\")); }";
|
||||
ASSERT_EQUALS("void foo ( ) { printf ( \"test3\" ) ; }", tokenizeAndStringify(code1c, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS("void foo ( ) { printf ( \"test3\" ) ; }", tokenizeAndStringify(code1c, true, Platform::Type::Win32A));
|
||||
|
||||
const char code2a[] = "void foo() { _tprintf (_T(\"test\") _T(\"1\")); }";
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test1\" ) ; }", tokenizeAndStringify(code2a, true, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test1\" ) ; }", tokenizeAndStringify(code2a, true, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test1\" ) ; }", tokenizeAndStringify(code2a, true, Platform::Type::Win32W));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test1\" ) ; }", tokenizeAndStringify(code2a, true, Platform::Type::Win64));
|
||||
const char code2b[] = "void foo() { _tprintf (_TEXT(\"test\") _TEXT(\"2\")); }";
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test2\" ) ; }", tokenizeAndStringify(code2b, true, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test2\" ) ; }", tokenizeAndStringify(code2b, true, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test2\" ) ; }", tokenizeAndStringify(code2b, true, Platform::Type::Win32W));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test2\" ) ; }", tokenizeAndStringify(code2b, true, Platform::Type::Win64));
|
||||
const char code2c[] = "void foo() { _tprintf (TEXT(\"test\") TEXT(\"3\")); }";
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test3\" ) ; }", tokenizeAndStringify(code2c, true, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test3\" ) ; }", tokenizeAndStringify(code2c, true, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test3\" ) ; }", tokenizeAndStringify(code2c, true, Platform::Type::Win32W));
|
||||
ASSERT_EQUALS("void foo ( ) { wprintf ( L\"test3\" ) ; }", tokenizeAndStringify(code2c, true, Platform::Type::Win64));
|
||||
}
|
||||
|
||||
void borland() {
|
||||
// __closure
|
||||
ASSERT_EQUALS("int ( * a ) ( ) ;", // TODO VarId
|
||||
tokenizeAndStringify("int (__closure *a)();", true, cppcheck::Platform::Type::Win32A));
|
||||
tokenizeAndStringify("int (__closure *a)();", true, Platform::Type::Win32A));
|
||||
|
||||
// __property
|
||||
ASSERT_EQUALS("class Fred { ; __property ; } ;",
|
||||
tokenizeAndStringify("class Fred { __property int x = { } };", true, cppcheck::Platform::Type::Win32A));
|
||||
tokenizeAndStringify("class Fred { __property int x = { } };", true, Platform::Type::Win32A));
|
||||
}
|
||||
|
||||
void simplifySQL() {
|
||||
|
@ -4869,42 +4869,42 @@ private:
|
|||
}
|
||||
|
||||
void simplifyCAlternativeTokens() {
|
||||
ASSERT_EQUALS("void or ( ) ;", tokenizeAndStringify("void or(void);", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a && b ) { ; } }", tokenizeAndStringify("void f() { if (a and b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a && b ) { ; } }", tokenizeAndStringify("void f() { if (a and b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a || b ) { ; } }", tokenizeAndStringify("void f() { if (a or b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a || b ) { ; } }", tokenizeAndStringify("void f() { if (a or b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a & b ) { ; } }", tokenizeAndStringify("void f() { if (a bitand b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a & b ) { ; } }", tokenizeAndStringify("void f() { if (a bitand b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a | b ) { ; } }", tokenizeAndStringify("void f() { if (a bitor b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a | b ) { ; } }", tokenizeAndStringify("void f() { if (a bitor b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a ^ b ) { ; } }", tokenizeAndStringify("void f() { if (a xor b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a ^ b ) { ; } }", tokenizeAndStringify("void f() { if (a xor b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ~ b ) { ; } }", tokenizeAndStringify("void f() { if (compl b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ~ b ) { ; } }", tokenizeAndStringify("void f() { if (compl b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { ; } }", tokenizeAndStringify("void f() { if (not b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { ; } }", tokenizeAndStringify("void f() { if (not b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) const { if ( ! b ) { ; } }", tokenizeAndStringify("void f() const { if (not b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a != b ) { ; } }", tokenizeAndStringify("void f() { if (a not_eq b); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a != b ) { ; } }", tokenizeAndStringify("void f() { if (a not_eq b); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void or ( ) ;", tokenizeAndStringify("void or(void);", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a && b ) { ; } }", tokenizeAndStringify("void f() { if (a and b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a && b ) { ; } }", tokenizeAndStringify("void f() { if (a and b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a || b ) { ; } }", tokenizeAndStringify("void f() { if (a or b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a || b ) { ; } }", tokenizeAndStringify("void f() { if (a or b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a & b ) { ; } }", tokenizeAndStringify("void f() { if (a bitand b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a & b ) { ; } }", tokenizeAndStringify("void f() { if (a bitand b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a | b ) { ; } }", tokenizeAndStringify("void f() { if (a bitor b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a | b ) { ; } }", tokenizeAndStringify("void f() { if (a bitor b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a ^ b ) { ; } }", tokenizeAndStringify("void f() { if (a xor b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a ^ b ) { ; } }", tokenizeAndStringify("void f() { if (a xor b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ~ b ) { ; } }", tokenizeAndStringify("void f() { if (compl b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ~ b ) { ; } }", tokenizeAndStringify("void f() { if (compl b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { ; } }", tokenizeAndStringify("void f() { if (not b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { ; } }", tokenizeAndStringify("void f() { if (not b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) const { if ( ! b ) { ; } }", tokenizeAndStringify("void f() const { if (not b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a != b ) { ; } }", tokenizeAndStringify("void f() { if (a not_eq b); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( a != b ) { ; } }", tokenizeAndStringify("void f() { if (a not_eq b); }", true, Platform::Type::Native, "test.cpp"));
|
||||
// #6201
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! c || ! memcmp ( a , b , s ) ) { ; } }", tokenizeAndStringify("void f() { if (!c or !memcmp(a, b, s)); }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! c || ! memcmp ( a , b , s ) ) { ; } }", tokenizeAndStringify("void f() { if (!c or !memcmp(a, b, s)); }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! c || ! memcmp ( a , b , s ) ) { ; } }", tokenizeAndStringify("void f() { if (!c or !memcmp(a, b, s)); }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! c || ! memcmp ( a , b , s ) ) { ; } }", tokenizeAndStringify("void f() { if (!c or !memcmp(a, b, s)); }", true, Platform::Type::Native, "test.cpp"));
|
||||
// #6029
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { } }", tokenizeAndStringify("void f() { if (not b){} }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { } }", tokenizeAndStringify("void f() { if (not b){} }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { } }", tokenizeAndStringify("void f() { if (not b){} }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( ! b ) { } }", tokenizeAndStringify("void f() { if (not b){} }", true, Platform::Type::Native, "test.cpp"));
|
||||
// #6207
|
||||
ASSERT_EQUALS("void f ( ) { if ( not = x ) { } }", tokenizeAndStringify("void f() { if (not=x){} }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( not = x ) { } }", tokenizeAndStringify("void f() { if (not=x){} }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( not = x ) { } }", tokenizeAndStringify("void f() { if (not=x){} }", true, Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( ) { if ( not = x ) { } }", tokenizeAndStringify("void f() { if (not=x){} }", true, Platform::Type::Native, "test.cpp"));
|
||||
// #8029
|
||||
ASSERT_EQUALS("void f ( struct S * s ) { x = s . and + 1 ; }", tokenizeAndStringify("void f(struct S *s) { x = s->and + 1; }", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("void f ( struct S * s ) { x = s . and + 1 ; }", tokenizeAndStringify("void f(struct S *s) { x = s->and + 1; }", true, Platform::Type::Native, "test.c"));
|
||||
// #8745
|
||||
ASSERT_EQUALS("void f ( ) { if ( x ) { or = 0 ; } }", tokenizeAndStringify("void f() { if (x) or = 0; }"));
|
||||
// #9324
|
||||
ASSERT_EQUALS("void f ( const char * str ) { while ( * str == '!' || * str == '[' ) { } }",
|
||||
tokenizeAndStringify("void f(const char *str) { while (*str=='!' or *str=='['){} }"));
|
||||
// #9920
|
||||
ASSERT_EQUALS("result = ch != s . end ( ) && * ch == ':' ;", tokenizeAndStringify("result = ch != s.end() and *ch == ':';", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("result = ch != s . end ( ) && * ch == ':' ;", tokenizeAndStringify("result = ch != s.end() and *ch == ':';", true, Platform::Type::Native, "test.c"));
|
||||
|
||||
// #8975
|
||||
ASSERT_EQUALS("void foo ( ) {\n"
|
||||
|
@ -4915,9 +4915,9 @@ private:
|
|||
"void foo() {\n"
|
||||
" char *or;\n"
|
||||
" while ((*or != 0) && (*or != '|')) or++;\n"
|
||||
"}", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
"}", true, Platform::Type::Native, "test.c"));
|
||||
// #10013
|
||||
ASSERT_EQUALS("void f ( ) { x = ! 123 ; }", tokenizeAndStringify("void f() { x = not 123; }", true, cppcheck::Platform::Type::Native, "test.cpp"));
|
||||
ASSERT_EQUALS("void f ( ) { x = ! 123 ; }", tokenizeAndStringify("void f() { x = not 123; }", true, Platform::Type::Native, "test.cpp"));
|
||||
}
|
||||
|
||||
void simplifyRoundCurlyParentheses() {
|
||||
|
@ -4939,7 +4939,7 @@ private:
|
|||
"operator ( ) ; "
|
||||
"}";
|
||||
|
||||
ASSERT_EQUALS(result, tokenizeAndStringify(code, /*expand=*/ true, /*platform=*/ cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS(result, tokenizeAndStringify(code, /*expand=*/ true, /*platform=*/ Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void simplifyOperatorName2() {
|
||||
|
@ -5588,10 +5588,10 @@ private:
|
|||
"float * ptrToFloat ;";
|
||||
|
||||
// These types should be defined the same on all Windows platforms
|
||||
const std::string win32A = tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win32A);
|
||||
const std::string win32A = tokenizeAndStringifyWindows(code, true, Platform::Type::Win32A);
|
||||
ASSERT_EQUALS(expected, win32A);
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win64));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, Platform::Type::Win32W));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, Platform::Type::Win64));
|
||||
}
|
||||
|
||||
void platformWin32A() {
|
||||
|
@ -5637,7 +5637,7 @@ private:
|
|||
"sscanf ( dst , \"%s\" , dst ) ; "
|
||||
"} "
|
||||
"unsigned char tbyte ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, Platform::Type::Win32A));
|
||||
}
|
||||
|
||||
void platformWin32W() {
|
||||
|
@ -5683,29 +5683,29 @@ private:
|
|||
"wscanf ( L\"%s\" , dst ) ; "
|
||||
"swscanf ( dst , L\"%s\" , dst ) ; "
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, Platform::Type::Win32W));
|
||||
}
|
||||
|
||||
void platformWin32AStringCat() { //#5150
|
||||
const char code[] = "TCHAR text[] = _T(\"123\") _T(\"456\") _T(\"789\");";
|
||||
const char expected[] = "char text [ 10 ] = \"123456789\" ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, Platform::Type::Win32A));
|
||||
}
|
||||
|
||||
void platformWin32WStringCat() { //#5150
|
||||
const char code[] = "TCHAR text[] = _T(\"123\") _T(\"456\") _T(\"789\");";
|
||||
const char expected[] = "wchar_t text [ 10 ] = L\"123456789\" ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, cppcheck::Platform::Type::Win32W));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, Platform::Type::Win32W));
|
||||
}
|
||||
|
||||
void platformWinWithNamespace() {
|
||||
const char code1[] = "UINT32 a; ::UINT32 b; foo::UINT32 c;";
|
||||
const char expected1[] = "unsigned int a ; unsigned int b ; foo :: UINT32 c ;";
|
||||
ASSERT_EQUALS(expected1, tokenizeAndStringifyWindows(code1, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS(expected1, tokenizeAndStringifyWindows(code1, true, Platform::Type::Win32A));
|
||||
|
||||
const char code2[] = "LPCVOID a; ::LPCVOID b; foo::LPCVOID c;";
|
||||
const char expected2[] = "const void * a ; const void * b ; foo :: LPCVOID c ;";
|
||||
ASSERT_EQUALS(expected2, tokenizeAndStringifyWindows(code2, true, cppcheck::Platform::Type::Win32A));
|
||||
ASSERT_EQUALS(expected2, tokenizeAndStringifyWindows(code2, true, Platform::Type::Win32A));
|
||||
}
|
||||
|
||||
void isOneNumber() const {
|
||||
|
@ -5789,10 +5789,10 @@ private:
|
|||
tokenizeAndStringify("[[deprecated]] int f();"));
|
||||
|
||||
ASSERT_EQUALS("[ [ deprecated ] ] int f ( ) ;",
|
||||
tokenizeAndStringify("[[deprecated]] int f();", true, cppcheck::Platform::Type::Native, "test.cpp", Standards::CPP03));
|
||||
tokenizeAndStringify("[[deprecated]] int f();", true, Platform::Type::Native, "test.cpp", Standards::CPP03));
|
||||
|
||||
ASSERT_EQUALS("[ [ deprecated ] ] int f ( ) ;",
|
||||
tokenizeAndStringify("[[deprecated]] int f();", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
tokenizeAndStringify("[[deprecated]] int f();", true, Platform::Type::Native, "test.c"));
|
||||
|
||||
ASSERT_EQUALS("template < class T > int f ( ) { }",
|
||||
tokenizeAndStringify("template <class T> [[noreturn]] int f(){}"));
|
||||
|
@ -5801,7 +5801,7 @@ private:
|
|||
tokenizeAndStringify("[[maybe_unused]] int f([[maybe_unused]] int i);"));
|
||||
|
||||
ASSERT_EQUALS("[ [ maybe_unused ] ] int f ( [ [ maybe_unused ] ] int i ) ;",
|
||||
tokenizeAndStringify("[[maybe_unused]] int f([[maybe_unused]] int i);", true, cppcheck::Platform::Type::Native, "test.cpp", Standards::CPP03));
|
||||
tokenizeAndStringify("[[maybe_unused]] int f([[maybe_unused]] int i);", true, Platform::Type::Native, "test.cpp", Standards::CPP03));
|
||||
|
||||
ASSERT_EQUALS("struct a ;",
|
||||
tokenizeAndStringify("struct [[]] a;"));
|
||||
|
@ -6684,7 +6684,7 @@ private:
|
|||
" return y;\n"
|
||||
" else\n"
|
||||
" return z;\n"
|
||||
"}\n", true, cppcheck::Platform::Type::Native, "test.cpp", Standards::CPP17));
|
||||
"}\n", true, Platform::Type::Native, "test.cpp", Standards::CPP17));
|
||||
|
||||
// #10079 - createInnerAST bug..
|
||||
ASSERT_EQUALS("x{([= yz= switchy(",
|
||||
|
@ -6834,7 +6834,7 @@ private:
|
|||
ASSERT_EQUALS("class Fred : Base { } ;", tokenizeAndStringify("class Fred FINAL : Base { } ;"));
|
||||
ASSERT_EQUALS("class Fred : Base { } ;", tokenizeAndStringify("class DLLEXPORT Fred final : Base { } ;")); // #11422
|
||||
// Regression for C code:
|
||||
ASSERT_EQUALS("struct Fred { } ;", tokenizeAndStringify("struct DLLEXPORT Fred { } ;", true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_EQUALS("struct Fred { } ;", tokenizeAndStringify("struct DLLEXPORT Fred { } ;", true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void sizeofAddParentheses() {
|
||||
|
@ -6892,12 +6892,12 @@ private:
|
|||
|
||||
ASSERT_NO_THROW(tokenizeAndStringify("void f(void* q) {\n"
|
||||
" g(&(S) { .p = (int*)q });\n"
|
||||
"}\n", /*expand*/ true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
"}\n", /*expand*/ true, Platform::Type::Native, "test.c"));
|
||||
|
||||
ASSERT_NO_THROW(tokenizeAndStringify("typedef struct { int i; } S;\n"
|
||||
"void f(float a) {\n"
|
||||
"S s = (S){ .i = (int)a };\n"
|
||||
"}\n", /*expand*/ true, cppcheck::Platform::Type::Native, "test.c"));
|
||||
"}\n", /*expand*/ true, Platform::Type::Native, "test.c"));
|
||||
}
|
||||
|
||||
void findGarbageCode() { // Test Tokenizer::findGarbageCode()
|
||||
|
@ -6985,7 +6985,7 @@ private:
|
|||
ASSERT_THROW_EQUALS(tokenizeAndStringify("void f() { assert(a+()); }"), InternalError, "syntax error: +()");
|
||||
|
||||
// #9445 - typeof is not a keyword in C
|
||||
ASSERT_NO_THROW(tokenizeAndStringify("void foo() { char *typeof, *value; }", false, cppcheck::Platform::Type::Native, "test.c"));
|
||||
ASSERT_NO_THROW(tokenizeAndStringify("void foo() { char *typeof, *value; }", false, Platform::Type::Native, "test.c"));
|
||||
|
||||
ASSERT_THROW_EQUALS(tokenizeAndStringify("enum : { };"), InternalError, "syntax error: Unexpected token '{'");
|
||||
ASSERT_THROW_EQUALS(tokenizeAndStringify("enum : 3 { };"), InternalError, "syntax error: Unexpected token '3'");
|
||||
|
|
|
@ -61,7 +61,7 @@ private:
|
|||
|
||||
void checkTooBigShift_Unix32() {
|
||||
const Settings settings0;
|
||||
const Settings settings = settingsBuilder().platform(cppcheck::Platform::Type::Unix32).build();
|
||||
const Settings settings = settingsBuilder().platform(Platform::Type::Unix32).build();
|
||||
|
||||
// unsigned types getting promoted to int sizeof(int) = 4 bytes
|
||||
// and unsigned types having already a size of 4 bytes
|
||||
|
@ -234,7 +234,7 @@ private:
|
|||
}
|
||||
|
||||
void checkIntegerOverflow() {
|
||||
const Settings settings = settingsBuilder().severity(Severity::warning).platform(cppcheck::Platform::Type::Unix32).build();
|
||||
const Settings settings = settingsBuilder().severity(Severity::warning).platform(Platform::Type::Unix32).build();
|
||||
|
||||
check("x = (int)0x10000 * (int)0x10000;", settings);
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) Signed integer overflow for expression '(int)0x10000*(int)0x10000'.\n", errout.str());
|
||||
|
@ -275,7 +275,7 @@ private:
|
|||
|
||||
void signConversion() {
|
||||
const Settings settings0;
|
||||
const Settings settings = settingsBuilder().platform(cppcheck::Platform::Type::Unix64).build();
|
||||
const Settings settings = settingsBuilder().platform(Platform::Type::Unix64).build();
|
||||
check("x = -4 * (unsigned)y;", settings0);
|
||||
ASSERT_EQUALS("[test.cpp:1]: (warning) Expression '-4' has a negative value. That is converted to an unsigned value and used in an unsigned calculation.\n", errout.str());
|
||||
|
||||
|
@ -324,8 +324,8 @@ private:
|
|||
}
|
||||
|
||||
void longCastAssign() {
|
||||
const Settings settings = settingsBuilder().severity(Severity::style).platform(cppcheck::Platform::Type::Unix64).build();
|
||||
const Settings settingsWin = settingsBuilder().severity(Severity::style).platform(cppcheck::Platform::Type::Win64).build();
|
||||
const Settings settings = settingsBuilder().severity(Severity::style).platform(Platform::Type::Unix64).build();
|
||||
const Settings settingsWin = settingsBuilder().severity(Severity::style).platform(Platform::Type::Win64).build();
|
||||
|
||||
const char code[] = "long f(int x, int y) {\n"
|
||||
" const long ret = x * y;\n"
|
||||
|
@ -375,8 +375,8 @@ private:
|
|||
}
|
||||
|
||||
void longCastReturn() {
|
||||
const Settings settings = settingsBuilder().severity(Severity::style).platform(cppcheck::Platform::Type::Unix64).build();
|
||||
const Settings settingsWin = settingsBuilder().severity(Severity::style).platform(cppcheck::Platform::Type::Win64).build();
|
||||
const Settings settings = settingsBuilder().severity(Severity::style).platform(Platform::Type::Unix64).build();
|
||||
const Settings settingsWin = settingsBuilder().severity(Severity::style).platform(Platform::Type::Win64).build();
|
||||
|
||||
const char code[] = "long f(int x, int y) {\n"
|
||||
" return x * y;\n"
|
||||
|
|
|
@ -83,7 +83,7 @@ private:
|
|||
}
|
||||
|
||||
#define check(...) check_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
void check_(const char* file, int line, const char code[], cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const Settings *s = nullptr) {
|
||||
void check_(const char* file, int line, const char code[], Platform::Type platform = Platform::Type::Native, const Settings *s = nullptr) {
|
||||
// Clear the error buffer..
|
||||
errout.str("");
|
||||
|
||||
|
@ -653,10 +653,10 @@ private:
|
|||
|
||||
const Settings s = settingsBuilder(settings).library("windows.cfg").build();
|
||||
|
||||
check("int WinMain() { }", cppcheck::Platform::Type::Native, &s);
|
||||
check("int WinMain() { }", Platform::Type::Native, &s);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("int _tmain() { }", cppcheck::Platform::Type::Native, &s);
|
||||
check("int _tmain() { }", Platform::Type::Native, &s);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -669,10 +669,10 @@ private:
|
|||
|
||||
const Settings s = settingsBuilder(settings).library("windows.cfg").build();
|
||||
|
||||
check("int wWinMain() { }", cppcheck::Platform::Type::Native, &s);
|
||||
check("int wWinMain() { }", Platform::Type::Native, &s);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("int _tmain() { }", cppcheck::Platform::Type::Native, &s);
|
||||
check("int _tmain() { }", Platform::Type::Native, &s);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -685,7 +685,7 @@ private:
|
|||
const Settings s = settingsBuilder(settings).library("gnu.cfg").build();
|
||||
|
||||
check("int _init() { }\n"
|
||||
"int _fini() { }\n", cppcheck::Platform::Type::Native, &s);
|
||||
"int _fini() { }\n", Platform::Type::Native, &s);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ private:
|
|||
}
|
||||
|
||||
#define check(...) check_(__FILE__, __LINE__, __VA_ARGS__)
|
||||
void check_(const char* file, int line, const char code[], cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native) {
|
||||
void check_(const char* file, int line, const char code[], Platform::Type platform = Platform::Type::Native) {
|
||||
// Clear the error buffer..
|
||||
errout.str("");
|
||||
|
||||
|
@ -606,7 +606,7 @@ private:
|
|||
"public:\n"
|
||||
" Foo() { }\n"
|
||||
" __property int x = {read=getx}\n"
|
||||
"};", cppcheck::Platform::Type::Win32A);
|
||||
"};", Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
@ -619,7 +619,7 @@ private:
|
|||
" }\n"
|
||||
"public:\n"
|
||||
" Foo() { }\n"
|
||||
"};", cppcheck::Platform::Type::Win32A);
|
||||
"};", Platform::Type::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
|
|
@ -992,7 +992,7 @@ private:
|
|||
|
||||
// ~
|
||||
code = "x = ~0U;";
|
||||
PLATFORM(settings.platform, cppcheck::Platform::Type::Native); // ensure platform is native
|
||||
PLATFORM(settings.platform, Platform::Type::Native); // ensure platform is native
|
||||
values = tokenValues(code,"~");
|
||||
ASSERT_EQUALS(1U, values.size());
|
||||
ASSERT_EQUALS(~0U, values.back().intvalue);
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
TestVarID() : TestFixture("TestVarID") {}
|
||||
|
||||
private:
|
||||
const Settings settings = settingsBuilder().c(Standards::C89).cpp(Standards::CPPLatest).platform(cppcheck::Platform::Type::Unix64).build();
|
||||
const Settings settings = settingsBuilder().c(Standards::C89).cpp(Standards::CPPLatest).platform(Platform::Type::Unix64).build();
|
||||
void run() override {
|
||||
TEST_CASE(varid1);
|
||||
TEST_CASE(varid2);
|
||||
|
|
Loading…
Reference in New Issue