IOT-1583: Temporary fix for remaining /W3 warnings.
authorPawel Winogrodzki <pawelwi@microsoft.com>
Sat, 20 May 2017 05:34:21 +0000 (22:34 -0700)
committerDan Mihai <Daniel.Mihai@microsoft.com>
Thu, 8 Jun 2017 21:55:20 +0000 (21:55 +0000)
This change suppresses some of the remaining /W3 VS compiler warnings,
fixes for which are too intrusive to meet the 1.3-rel bar.

In addition to that we're enabling the /WX compiler option
to prevent any new /W3 warnings from being checked in.

Change-Id: I061bc1c83615e052d77f8eb6b96fd488d1f49e4b
Signed-off-by: Pawel Winogrodzki <pawelwi@microsoft.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/20487
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
17 files changed:
build_common/windows/SConscript
extlibs/cjson/SConscript
extlibs/gtest/SConscript
extlibs/libcoap/SConscript
extlibs/mbedtls/SConscript
extlibs/sqlite3/SConscript
resource/c_common/SConscript
resource/c_common/unittests/SConscript
resource/csdk/connectivity/SConscript
resource/csdk/connectivity/test/SConscript
resource/csdk/security/SConscript
resource/csdk/security/unittests/SConscript
resource/csdk/stack/SConscript
resource/csdk/stack/test/SConscript
resource/include/OCRepresentation.h
resource/src/OCRepresentation.cpp
resource/unittests/OCRepresentationEncodingTest.cpp

index 044c8ab..5fcdb86 100644 (file)
@@ -33,10 +33,16 @@ if env['CC'] == 'cl':
     #    - Disabled due to IoTivity not being ANSI compatible
     #  - warning C4232: nonstandard extension used: 'read': address of dllimport 'fread' is not static, identity not guaranteed
     #    - fread, frwrite, etc are provided by the platform and cannot be changed.
+    #  - warning C4503: decorated name length exceeded, name was truncated.
+    #    - Might cause issues during linking and debugging.
+    #  - warning C4512: assignment operator could not be generated.
+    #    - It's an acceptable warning displayed only by Visual Studio 2013 compiler.
     #  - warning C4706: assignment within conditional expression
     #    - Disabled due to the widespread usage in IoTivity and low impact.
-    env.AppendUnique(CCFLAGS=['/wd4127', '/wd4200', '/wd4201', '/wd4204', '/wd4214', '/wd4221', '/wd4232', '/wd4706'])
+    env.AppendUnique(CCFLAGS=['/wd4127', '/wd4200', '/wd4201', '/wd4204', '/wd4214', '/wd4221', '/wd4232', '/wd4503', '/wd4512', '/wd4706'])
 
+    # Enabling /W3 warnings globally for Windows builds.
+    env.AppendUnique(CCFLAGS=['/W3', '/WX'])
     env.AppendUnique(CCFLAGS=['/EHsc'])
 
     # Set release/debug flags
@@ -71,7 +77,7 @@ if env['CC'] == 'cl':
     # will not work on all systems supported by IoTivity. This will prevent Visual
     # Studio from displaying unwanted warnings.
     # See https://msdn.microsoft.com/en-us/library/ttcz0bys.aspx for more details.
-    env.AppendUnique(CPPDEFINES=['_CRT_SECURE_NO_WARNINGS', '_CRT_NONSTDC_NO_WARNINGS'])
+    env.AppendUnique(CPPDEFINES=['_CRT_SECURE_NO_WARNINGS', '_CRT_NONSTDC_NO_WARNINGS', '_SCL_SECURE_NO_WARNINGS'])
 
     if env.get('UWP_APP') != '1':
         # Add Desktop specific libraries
index 8365b70..58d2872 100644 (file)
@@ -26,7 +26,7 @@ if cjson_env.get('TARGET_OS') in ['windows', 'msys_nt']:
     # Macro needed for Windows builds to avoid __declspec(dllexport) and __declspec(dllimport) for cJSON APIs.
     cjson_env.AppendUnique(CPPDEFINES = ['CJSON_HIDE_SYMBOLS'])
     if cjson_env['CC'] == 'cl':
-        cjson_env.AppendUnique(CCFLAGS = ['/W4', '/WX'])
+        cjson_env.AppendUnique(CCFLAGS = ['/W4'])
 
 libcjson = cjson_env.StaticLibrary('cjson', ['cJSON.c'], OBJPREFIX='libcjson_')
 cjson_env.InstallTarget(libcjson, 'cjson');
index 39c0b5f..7bbdc8d 100644 (file)
@@ -78,7 +78,7 @@ elif target_os in ['windows']:
                gtest_build_env = gtest_env.Clone()
                gtest_build_env.AppendUnique(CPPPATH = [ os.path.join(gtest_dir, 'include') ])
                gtest_build_env.AppendUnique(CXXFLAGS = ['/EHsc'])
-               gtest_build_env.AppendUnique(CCFLAGS = ['/W4', '/WX'])
+               gtest_build_env.AppendUnique(CCFLAGS = ['/W4'])
                gtest = gtest_build_env.StaticLibrary(target = 'gtest', source = [ '%s/src/gtest-all.cc' % gtest_dir ])
                gtest_main = gtest_build_env.StaticLibrary(target = 'gtest_main', source = [ '%s/src/gtest_main.cc' % gtest_dir ])
                gtest_env.InstallTarget(gtest, 'gtest')
index c16d433..8aa912d 100644 (file)
@@ -317,7 +317,7 @@ else:
     libcoap_src = glob.glob(os.path.join(libcoap_src_root, '*.c'))
 
 if libcoap_env['CC'] == 'cl':
-    libcoap_env.AppendUnique(CCFLAGS = ['/W4', '/WX'])
+    libcoap_env.AppendUnique(CCFLAGS = ['/W4'])
 
 libcoap = libcoap_env.StaticLibrary('coap', libcoap_src, OBJPREFIX='libcoap_')
 
index ed90ffb..c3568be 100644 (file)
@@ -107,7 +107,7 @@ else:
 mbedtls_env = env.Clone()
 
 if mbedtls_env['CC'] == 'cl':
-    mbedtls_env.AppendUnique(CCFLAGS = ['/W4', '/WX'])
+    mbedtls_env.AppendUnique(CCFLAGS = ['/W4'])
 
 mbedtls_env.AppendUnique(CPPPATH = [
     mbedtls_dir,
index 30e2184..0117ee4 100755 (executable)
@@ -40,7 +40,7 @@ if target_os in targets_need_sqlite:
         shutil.rmtree(sqlite_tmp_dir)
 
 if target_os in ['windows']:
-    sqlite_env.AppendUnique(CCFLAGS = ['/W4', '/WX'])
+    sqlite_env.AppendUnique(CCFLAGS = ['/W4'])
     if sqlite_env.get('UWP_APP') == '1':
         sqlite_env.AppendUnique(CPPDEFINES=['SQLITE_OS_WINRT'])
     libsqlite3 = sqlite_env.StaticLibrary('sqlite3', sqlite_c)
index 43d5758..0d3fd19 100644 (file)
@@ -163,7 +163,7 @@ common_env = env.Clone()
 ######################################################################
 
 if target_os in ['windows', 'msys_nt']:
-    common_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    common_env.AppendUnique(CCFLAGS=['/W4'])
 
 ######################################################################
 # Add platform-specific helper library
index 8cf52d0..30ace61 100644 (file)
@@ -29,7 +29,7 @@ target_os = common_test_env.get('TARGET_OS')
 
 # Enable treating all warnings as errors for Windows.
 if target_os in ['windows', 'msys_nt']:
-    common_test_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    common_test_env.AppendUnique(CCFLAGS=['/W4'])
 
 SConscript('../oic_string/test/SConscript', exports = { 'test_env' : common_test_env})
 SConscript('../oic_malloc/test/SConscript', exports = { 'test_env' : common_test_env})
index 6450bcf..b48beb8 100644 (file)
@@ -18,7 +18,7 @@ print "BUILD_SAMPLE is %s" % build_sample
 print "MQ flag is %s" % with_mq
 
 if target_os in ['msys_nt', 'windows']:
-    connectivity_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    connectivity_env.AppendUnique(CCFLAGS=['/W4'])
 
 targets_disallow_multitransport = ['arduino']
 
index 1d17770..38e9b35 100644 (file)
@@ -86,7 +86,7 @@ if 'SERVER' in rd_mode:
 if target_os not in ['msys_nt', 'windows']:
     catest_env.AppendUnique(LIBS = ['m'])
 else:
-    catest_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    catest_env.AppendUnique(CCFLAGS=['/W4'])
 
 ######################################################################
 # Source files and Targets
index 081d878..f422e60 100644 (file)
@@ -57,10 +57,7 @@ libocsrm_env.PrependUnique(CPPPATH = [
 
 if target_os in ['windows', 'msys_nt']:
        libocsrm_env.AppendUnique(LIBPATH = [os.path.join(libocsrm_env.get('BUILD_DIR'), 'resource', 'oc_logger')])
-    #  - warning C4200: nonstandard extension used: zero-sized array in struct/union
-    #  - warning C4214: nonstandard extension used: bit field types other than int
-    #    - warnings inherited from a header included from libcoap
-       libocsrm_env.AppendUnique(CCFLAGS=['/wd4200', '/wd4214', '/W4', '/WX'])
+       libocsrm_env.AppendUnique(CCFLAGS=['/W4'])
 
 if target_os in ['linux', 'android', 'tizen', 'msys_nt', 'windows'] and libocsrm_env.get('SECURED') == '1':
        SConscript('provisioning/SConscript', 'libocsrm_env')
index f904504..b830dac 100644 (file)
@@ -27,7 +27,7 @@ Import('test_env')
 security_test_env = test_env.Clone()
 
 if security_test_env.get('TARGET_OS') in ['windows', 'msys_nt']:
-    security_test_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    security_test_env.AppendUnique(CCFLAGS=['/W4'])
 
 SConscript('../unittest/SConscript', exports = { 'test_env' : security_test_env })
 SConscript('../provisioning/unittest/SConscript', exports = { 'test_env' : security_test_env })
index b09aef0..413c115 100644 (file)
@@ -120,7 +120,7 @@ if target_os in ['android', 'linux', 'tizen', 'msys_nt', 'windows']:
 if target_os not in ['windows', 'msys_nt']:
     liboctbstack_env.AppendUnique(LIBS = ['m'])
 else:
-    liboctbstack_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    liboctbstack_env.AppendUnique(CCFLAGS=['/W4'])
 
     # octbstack.def specifies the list of functions exported by octbstack.dll.
     liboctbstack_env.Replace(WINDOWS_INSERT_DEF = ['1'])
index 5d5228b..df0e10a 100644 (file)
@@ -71,7 +71,7 @@ if stacktest_env.get('LOGGING'):
     stacktest_env.AppendUnique(CPPDEFINES = ['TB_LOG'])
 
 if target_os in ['msys_nt', 'windows']:
-    stacktest_env.AppendUnique(CCFLAGS=['/W4', '/WX'])
+    stacktest_env.AppendUnique(CCFLAGS=['/W4'])
 else:
     stacktest_env.PrependUnique(LIBS = ['m'])
     if target_os in ['tizen', 'linux']:
index 681fd30..561bea4 100644 (file)
@@ -134,7 +134,7 @@ namespace OC
 
             bool emptyData() const;
 
-            int numberOfAttributes() const;
+            size_t numberOfAttributes() const;
 
             bool erase(const std::string& str);
 
@@ -175,7 +175,7 @@ namespace OC
                         val = boost::get<T>(x->second);
                         return true;
                     }
-                    catch (boost::bad_get& e)
+                    catch (boost::bad_get&)
                     {
                         val = T();
                         return false;
@@ -207,7 +207,7 @@ namespace OC
                     {
                         val = boost::get<T>(x->second);
                     }
-                    catch (boost::bad_get& e)
+                    catch (boost::bad_get&)
                     {
                         return val;
                     }
@@ -271,7 +271,7 @@ namespace OC
                         {
                             return boost::get<T>(m_values[m_attrName]);
                         }
-                        catch (boost::bad_get& e)
+                        catch (boost::bad_get&)
                         {
                             T val = T();
                             return val;
index 76002c4..0be107a 100644 (file)
@@ -123,11 +123,11 @@ namespace OC
             dimensions[2] = 0;
             dimTotal = calcDimTotal(dimensions);
 
-            array = (void*)OICMalloc(dimTotal * root_size);
+            m_array = (void*)OICMalloc(dimTotal * root_size);
 
             for(size_t i = 0; i < dimensions[0]; ++i)
             {
-                copy_to_array(arr[i], array, i);
+                copy_to_array(arr[i], m_array, i);
             }
 
         }
@@ -143,13 +143,13 @@ namespace OC
                 dimensions[1] = std::max(dimensions[1], arr[i].size());
             }
             dimTotal = calcDimTotal(dimensions);
-            array = (void*)OICCalloc(1, dimTotal * root_size);
+            m_array = (void*)OICCalloc(1, dimTotal * root_size);
 
             for(size_t i = 0; i < dimensions[0]; ++i)
             {
                 for(size_t j = 0; j < dimensions[1] && j < arr[i].size(); ++j)
                 {
-                    copy_to_array(arr[i][j], array, i*dimensions[1] + j);
+                    copy_to_array(arr[i][j], m_array, i*dimensions[1] + j);
                 }
             }
         }
@@ -171,7 +171,7 @@ namespace OC
             }
 
             dimTotal = calcDimTotal(dimensions);
-            array = (void*)OICCalloc(1, dimTotal * root_size);
+            m_array = (void*)OICCalloc(1, dimTotal * root_size);
 
             for(size_t i = 0; i < dimensions[0]; ++i)
             {
@@ -179,7 +179,7 @@ namespace OC
                 {
                     for(size_t k = 0; k < dimensions[2] && k < arr[i][j].size(); ++k)
                     {
-                        copy_to_array(arr[i][j][k], array,
+                        copy_to_array(arr[i][j][k], m_array,
                                 dimensions[2] * j +
                                 dimensions[2] * dimensions[1] * i +
                                 k);
@@ -203,7 +203,7 @@ namespace OC
         size_t dimensions[MAX_REP_ARRAY_DEPTH];
         size_t root_size;
         size_t dimTotal;
-        void* array;
+        void* m_array;
     };
 
     template<>
@@ -291,31 +291,31 @@ namespace OC
         {
             case AttributeType::Integer:
                 OCRepPayloadSetIntArrayAsOwner(payload, item.attrname().c_str(),
-                        (int64_t*)vis.array,
+                        (int64_t*)vis.m_array,
                         vis.dimensions);
                 break;
             case AttributeType::Double:
                 OCRepPayloadSetDoubleArrayAsOwner(payload, item.attrname().c_str(),
-                        (double*)vis.array,
+                        (double*)vis.m_array,
                         vis.dimensions);
                 break;
             case AttributeType::Boolean:
                 OCRepPayloadSetBoolArrayAsOwner(payload, item.attrname().c_str(),
-                        (bool*)vis.array,
+                        (bool*)vis.m_array,
                         vis.dimensions);
                 break;
             case AttributeType::String:
                 OCRepPayloadSetStringArrayAsOwner(payload, item.attrname().c_str(),
-                        (char**)vis.array,
+                        (char**)vis.m_array,
                         vis.dimensions);
                 break;
             case AttributeType::OCByteString:
                 OCRepPayloadSetByteStringArrayAsOwner(payload, item.attrname().c_str(),
-                                                      (OCByteString *)vis.array, vis.dimensions);
+                                                      (OCByteString *)vis.m_array, vis.dimensions);
                 break;
             case AttributeType::OCRepresentation:
                 OCRepPayloadSetPropObjectArrayAsOwner(payload, item.attrname().c_str(),
-                        (OCRepPayload**)vis.array, vis.dimensions);
+                        (OCRepPayload**)vis.m_array, vis.dimensions);
                 break;
             default:
                 throw std::logic_error(std::string("GetPayloadArray: Not Implemented") +
@@ -419,7 +419,13 @@ namespace OC
     template<>
     int OCRepresentation::payload_array_helper_copy<int>(size_t index, const OCRepPayloadValue* pl)
     {
+// Needs to be removed as part of IOT-1726 fix.
+#ifdef _MSC_VER
+#pragma warning(suppress : 4244)
         return pl->arr.iArray[index];
+#else
+        return pl->arr.iArray[index];
+#endif
     }
     template<>
     double OCRepresentation::payload_array_helper_copy<double>(size_t index, const OCRepPayloadValue* pl)
@@ -578,7 +584,13 @@ namespace OC
                     setNULL(val->name);
                     break;
                 case OCREP_PROP_INT:
+                    // Needs to be removed as part of IOT-1726 fix.
+#ifdef _MSC_VER
+#pragma warning(suppress : 4244)
                     setValue<int>(val->name, val->i);
+#else
+                    setValue<int>(val->name, val->i);
+#endif
                     break;
                 case OCREP_PROP_DOUBLE:
                     setValue<double>(val->name, val->d);
@@ -774,14 +786,14 @@ namespace OC
         return true;
     }
 
-    int OCRepresentation::numberOfAttributes() const
+    size_t OCRepresentation::numberOfAttributes() const
     {
         return m_values.size();
     }
 
     bool OCRepresentation::erase(const std::string& str)
     {
-        return m_values.erase(str);
+        return (m_values.erase(str) > 0);
     }
 
     void OCRepresentation::setNULL(const std::string& str)
index e0c3a45..ecfb722 100644 (file)
@@ -67,7 +67,7 @@ namespace OCRepresentationEncodingTest
         static const char piid1[] = "e987b8f5-527a-454e-98c1-1eef2e5f1cf5";
         const char devicename1[] = "device name";
         OCRepPayload *device = OCRepPayloadCreate();
-        EXPECT_TRUE(device);
+        EXPECT_NE((decltype(device))NULL, device);
         EXPECT_TRUE(OCRepPayloadAddResourceType(device, OC_RSRVD_RESOURCE_TYPE_DEVICE));
         EXPECT_TRUE(OCRepPayloadAddResourceType(device, "oic.d.tv"));
         EXPECT_TRUE(OCRepPayloadSetPropString(device, OC_RSRVD_DEVICE_ID, sid1));
@@ -78,7 +78,7 @@ namespace OCRepresentationEncodingTest
 
         size_t dim[MAX_REP_ARRAY_DEPTH] = {1, 0, 0};
         char **dt = (char **)OICMalloc(sizeof(char *) * 1);
-        EXPECT_TRUE(dt);
+        EXPECT_NE((decltype(dt))NULL, dt);
         dt[0] = OICStrdup(OC_DATA_MODEL_VERSION);
         EXPECT_TRUE(OCRepPayloadSetStringArray(device, OC_RSRVD_DATA_MODEL_VERSION, (const char **)dt, dim));
         OICFree(dt[0]);
@@ -133,7 +133,7 @@ namespace OCRepresentationEncodingTest
         OCPayloadDestroy(parsedDevice);
 
         device = OCRepPayloadCreate();
-        EXPECT_TRUE(device);
+        EXPECT_NE((decltype(device))NULL, device);
         EXPECT_TRUE(OCRepPayloadAddResourceType(device, OC_RSRVD_RESOURCE_TYPE_DEVICE));
         EXPECT_TRUE(OCRepPayloadAddResourceType(device, "oic.d.tv"));
         EXPECT_TRUE(OCRepPayloadSetPropString(device, OC_RSRVD_DEVICE_NAME, devicename1));
@@ -142,7 +142,7 @@ namespace OCRepresentationEncodingTest
         EXPECT_TRUE(OCRepPayloadSetPropString(device, OC_RSRVD_SPEC_VERSION, OC_SPEC_VERSION));
         size_t dim1[MAX_REP_ARRAY_DEPTH] = {2, 0, 0};
         char **dt1 = (char **)OICMalloc(sizeof(char *) * 2);
-        EXPECT_TRUE(dt1);
+        EXPECT_NE((decltype(dt1))NULL, dt1);
         dt1[0] = OICStrdup("ocf.res.1.1.0");
         dt1[1] = OICStrdup("ocf.sh.1.1.0");
         OCRepPayloadSetStringArray(device, OC_RSRVD_DATA_MODEL_VERSION, (const char**)dt1, dim1);