@@ -495,6 +495,44 @@ class TestType : public TestFixture {
495495 " return 1234.5;\n "
496496 " }" , settingsDefault);
497497 ASSERT_EQUALS (" [test.cpp:2]: (error) Undefined behaviour: float () to integer conversion overflow.\n " , removeFloat (errout_str ()));
498+
499+ checkP (" #define TEST(b, f) b ? 5000 : (unsigned short)f\n " // #11685
500+ " void f()\n "
501+ " {\n "
502+ " unsigned short u = TEST(true, 75000.0);\n "
503+ " }\n " , settingsDefault);
504+ ASSERT_EQUALS (" " , errout_str ());
505+
506+ checkP (" #define TEST(b, f) b ? 5000 : (unsigned short)f\n "
507+ " void f()\n "
508+ " {\n "
509+ " unsigned short u = TEST(false, 75000.0);\n "
510+ " }\n " , settingsDefault);
511+ ASSERT_EQUALS (" [test.cpp:4]: (error) Undefined behaviour: float () to integer conversion overflow.\n " , removeFloat (errout_str ()));
512+
513+ check ( " bool f(unsigned short x);\n "
514+ " bool g() {\n "
515+ " return false && f((unsigned short)75000.0);\n "
516+ " }\n " , settingsDefault);
517+ ASSERT_EQUALS (" " , errout_str ());
518+
519+ check ( " bool f(unsigned short x);\n "
520+ " bool g() {\n "
521+ " return true && f((unsigned short)75000.0);\n "
522+ " }\n " , settingsDefault);
523+ ASSERT_EQUALS (" [test.cpp:3]: (error) Undefined behaviour: float () to integer conversion overflow.\n " , removeFloat (errout_str ()));
524+
525+ check ( " bool f(unsigned short x);\n "
526+ " bool g() {\n "
527+ " return true || f((unsigned short)75000.0);\n "
528+ " }\n " , settingsDefault);
529+ ASSERT_EQUALS (" " , errout_str ());
530+
531+ check ( " bool f(unsigned short x);\n "
532+ " bool g() {\n "
533+ " return false || f((unsigned short)75000.0);\n "
534+ " }\n " , settingsDefault);
535+ ASSERT_EQUALS (" [test.cpp:3]: (error) Undefined behaviour: float () to integer conversion overflow.\n " , removeFloat (errout_str ()));
498536 }
499537
500538 void integerOverflow () { // #11794
0 commit comments