#include "analyzer-decls.h" /* Verify the handling of "switch (enum_value)". */ enum e { E_VAL0, E_VAL1, E_VAL2, E_VAL10 = 10, E_VAL11 = 11, E_VAL12 = 12, E_VAL20 = 20, E_VAL21 = 21, E_VAL22 = 22 }; /* Verify that we assume that "switch (enum)" doesn't follow implicit "default" if all enum values have cases */ int test_all_values_covered_implicit_default_1 (enum e x) { switch (x) { case E_VAL0...E_VAL2: return 1066; case E_VAL10...E_VAL12: return 1776; case E_VAL20...E_VAL22: return 1945; } __analyzer_dump_path (); /* { dg-bogus "path" } */ } int test_all_values_covered_implicit_default_2 (enum e x) { int result; switch (x) { case E_VAL0...E_VAL2: result = 1066; break; case E_VAL10...E_VAL12: result = 1776; break; case E_VAL20...E_VAL22: result = 1945; break; } return result; /* { dg-bogus "uninitialized" } */ } /* Verify that we consider paths that use the implicit default when not all enum values are covered by cases. */ int test_missing_values_implicit_default_1 (enum e x) { switch (x) /* { dg-message "following 'default:' branch" } */ { case E_VAL0...E_VAL2: return 1066; case E_VAL10...E_VAL12: return 1776; } __analyzer_dump_path (); /* { dg-message "path" } */ return 0; } int test_missing_values_implicit_default_2 (enum e x) { int result; switch (x) /* { dg-message "following 'default:' branch" } */ { case E_VAL0...E_VAL2: result = 1066; break; case E_VAL10...E_VAL12: result = 1776; break; } return result; /* { dg-warning "uninitialized" } */ } /* Verify that explicit "default" isn't rejected. */ int test_all_values_covered_explicit_default_1 (enum e x) { switch (x) { case E_VAL0...E_VAL2: return 1066; case E_VAL10...E_VAL12: return 1776; case E_VAL20...E_VAL22: return 1945; default: __analyzer_dump_path (); /* { dg-message "path" } */ return 0; } } int test_missing_values_explicit_default_1 (enum e x) { switch (x) { default: case E_VAL0...E_VAL2: return 1066; case E_VAL10...E_VAL12: return 1776; } __analyzer_dump_path (); /* { dg-bogus "path" } */ return 0; } int test_missing_values_explicit_default_2 (enum e x) { switch (x) { case E_VAL0...E_VAL2: return 1066; case E_VAL10...E_VAL12: return 1776; default: __analyzer_dump_path (); /* { dg-message "path" } */ return 1945; } __analyzer_dump_path (); /* { dg-bogus "path" } */ return 0; }