diff mbox

[1/2] libsepol/tests: fix -Wsometimes-uninitialized clang warnings

Message ID 20161226211044.5978-1-nicolas.iooss@m4x.org (mailing list archive)
State Not Applicable
Headers show

Commit Message

Nicolas Iooss Dec. 26, 2016, 9:10 p.m. UTC
When compiling libsepol tests, clang complains about some uninitialized
variables:

    test-common.c:171:14: error: variable 'my_primary' is used
    uninitialized whenever 'if' condition is false
    [-Werror,-Wsometimes-uninitialized]
                    } else if (my_flavor == TYPE_ALIAS) {
                               ^~~~~~~~~~~~~~~~~~~~~~~
    test-common.c:179:30: note: uninitialized use occurs here
                    CU_ASSERT(type->primary == my_primary);
                                               ^~~~~~~~~~
    /usr/include/CUnit/CUnit.h:123:30: note: expanded from macro
    'CU_ASSERT'
      { CU_assertImplementation((value), __LINE__, #value, __FILE__, "", CU_...
                                 ^
    test-common.c:171:10: note: remove the 'if' if its condition is
    always true
                    } else if (my_flavor == TYPE_ALIAS) {
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    test-common.c:153:25: note: initialize the variable 'my_primary' to
    silence this warning
            unsigned int my_primary, my_flavor, my_value;
                                   ^
                                    = 0
    test-common.c:171:14: error: variable 'my_value' is used
    uninitialized whenever 'if' condition is false
    [-Werror,-Wsometimes-uninitialized]
                    } else if (my_flavor == TYPE_ALIAS) {
                               ^~~~~~~~~~~~~~~~~~~~~~~
    test-common.c:181:30: note: uninitialized use occurs here
                    CU_ASSERT(type->s.value == my_value);
                                               ^~~~~~~~
    /usr/include/CUnit/CUnit.h:123:30: note: expanded from macro
    'CU_ASSERT'
      { CU_assertImplementation((value), __LINE__, #value, __FILE__, "", CU_...
                                 ^
    test-common.c:171:10: note: remove the 'if' if its condition is
    always true
                    } else if (my_flavor == TYPE_ALIAS) {
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    test-common.c:153:46: note: initialize the variable 'my_value' to
    silence this warning
            unsigned int my_primary, my_flavor, my_value;
                                                        ^
                                                         = 0

This is because the call to CU_FAIL("not an alias") is not fatal in
test_alias_datum(), and variables my_primary and my_value are indeed
used uninitialized in a CU_ASSERT statement later.

Silent the warning by moving the elseif condition to a CU_ASSERT
statement which replaces the CU_FAIL.

Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
---
 libsepol/tests/test-common.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

James Carter Jan. 6, 2017, 7:22 p.m. UTC | #1
On 12/26/2016 04:10 PM, Nicolas Iooss wrote:
> When compiling libsepol tests, clang complains about some uninitialized
> variables:
>
>     test-common.c:171:14: error: variable 'my_primary' is used
>     uninitialized whenever 'if' condition is false
>     [-Werror,-Wsometimes-uninitialized]
>                     } else if (my_flavor == TYPE_ALIAS) {
>                                ^~~~~~~~~~~~~~~~~~~~~~~
>     test-common.c:179:30: note: uninitialized use occurs here
>                     CU_ASSERT(type->primary == my_primary);
>                                                ^~~~~~~~~~
>     /usr/include/CUnit/CUnit.h:123:30: note: expanded from macro
>     'CU_ASSERT'
>       { CU_assertImplementation((value), __LINE__, #value, __FILE__, "", CU_...
>                                  ^
>     test-common.c:171:10: note: remove the 'if' if its condition is
>     always true
>                     } else if (my_flavor == TYPE_ALIAS) {
>                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     test-common.c:153:25: note: initialize the variable 'my_primary' to
>     silence this warning
>             unsigned int my_primary, my_flavor, my_value;
>                                    ^
>                                     = 0
>     test-common.c:171:14: error: variable 'my_value' is used
>     uninitialized whenever 'if' condition is false
>     [-Werror,-Wsometimes-uninitialized]
>                     } else if (my_flavor == TYPE_ALIAS) {
>                                ^~~~~~~~~~~~~~~~~~~~~~~
>     test-common.c:181:30: note: uninitialized use occurs here
>                     CU_ASSERT(type->s.value == my_value);
>                                                ^~~~~~~~
>     /usr/include/CUnit/CUnit.h:123:30: note: expanded from macro
>     'CU_ASSERT'
>       { CU_assertImplementation((value), __LINE__, #value, __FILE__, "", CU_...
>                                  ^
>     test-common.c:171:10: note: remove the 'if' if its condition is
>     always true
>                     } else if (my_flavor == TYPE_ALIAS) {
>                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     test-common.c:153:46: note: initialize the variable 'my_value' to
>     silence this warning
>             unsigned int my_primary, my_flavor, my_value;
>                                                         ^
>                                                          = 0
>
> This is because the call to CU_FAIL("not an alias") is not fatal in
> test_alias_datum(), and variables my_primary and my_value are indeed
> used uninitialized in a CU_ASSERT statement later.
>
> Silent the warning by moving the elseif condition to a CU_ASSERT
> statement which replaces the CU_FAIL.
>
> Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>

Applied.

Thanks,

> ---
>  libsepol/tests/test-common.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/libsepol/tests/test-common.c b/libsepol/tests/test-common.c
> index 058b7435890e..dae47df3dd01 100644
> --- a/libsepol/tests/test-common.c
> +++ b/libsepol/tests/test-common.c
> @@ -168,12 +168,11 @@ void test_alias_datum(policydb_t * p, char *id, char *primary_id, char mode, uns
>  		if (my_flavor == TYPE_TYPE) {
>  			my_primary = 0;
>  			my_value = primary->s.value;
> -		} else if (my_flavor == TYPE_ALIAS) {
> +		} else {
> +			CU_ASSERT(my_flavor == TYPE_ALIAS);
>  			my_primary = primary->s.value;
>  			CU_ASSERT_NOT_EQUAL(type->s.value, primary->s.value);
>  			my_value = type->s.value;
> -		} else {
> -			CU_FAIL("not an alias");
>  		}
>
>  		CU_ASSERT(type->primary == my_primary);
>
diff mbox

Patch

diff --git a/libsepol/tests/test-common.c b/libsepol/tests/test-common.c
index 058b7435890e..dae47df3dd01 100644
--- a/libsepol/tests/test-common.c
+++ b/libsepol/tests/test-common.c
@@ -168,12 +168,11 @@  void test_alias_datum(policydb_t * p, char *id, char *primary_id, char mode, uns
 		if (my_flavor == TYPE_TYPE) {
 			my_primary = 0;
 			my_value = primary->s.value;
-		} else if (my_flavor == TYPE_ALIAS) {
+		} else {
+			CU_ASSERT(my_flavor == TYPE_ALIAS);
 			my_primary = primary->s.value;
 			CU_ASSERT_NOT_EQUAL(type->s.value, primary->s.value);
 			my_value = type->s.value;
-		} else {
-			CU_FAIL("not an alias");
 		}
 
 		CU_ASSERT(type->primary == my_primary);