fix unreachable 'break' and 'return' (-Wunreachable-code-*)

This commit is contained in:
Cebtenzzre 2023-09-14 17:19:24 -04:00
parent 141c645fc4
commit 1191cc3769
5 changed files with 31 additions and 20 deletions

View file

@ -419,6 +419,9 @@ if (LLAMA_ALL_WARNINGS)
-Wcast-qual
-Wno-unused-function
)
if (CMAKE_C_COMPILER_ID MATCHES "Clang") # clang only
set(warning_flags ${warning_flags} -Wunreachable-code-break -Wunreachable-code-return)
endif()
set(c_flags
${warning_flags}
-Wdouble-promotion

View file

@ -181,12 +181,13 @@ MK_CXXFLAGS += $(WARN_FLAGS) -Wmissing-declarations -Wmissing-noreturn
# TODO(cebtenzzre): remove this once PR #2632 gets merged
TTFS_CXXFLAGS = $(CXXFLAGS) -Wno-missing-declarations
ifneq '' '$(findstring clang,$(shell $(CXX) --version))'
# clang++ only
MK_HOST_CXXFLAGS += -Wmissing-prototypes
ifneq '' '$(findstring clang,$(shell $(CC) --version))'
# clang only
MK_CFLAGS += -Wunreachable-code-break -Wunreachable-code-return
MK_HOST_CXXFLAGS += -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes
TTFS_CXXFLAGS += -Wno-missing-prototypes
else
# g++ only
# gcc only
MK_HOST_CXXFLAGS += -Wno-format-truncation -Wno-array-bounds
endif

View file

@ -712,10 +712,9 @@ std::string gpt_random_prompt(std::mt19937 & rng) {
case 7: return "He";
case 8: return "She";
case 9: return "They";
default: return "To";
}
return "The";
GGML_UNREACHABLE();
}
//

28
ggml.c
View file

@ -5071,31 +5071,31 @@ int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i) {
{
GGML_ASSERT(tensor->nb[0] == sizeof(int8_t));
return ((int8_t *)(tensor->data))[i];
} break;
}
case GGML_TYPE_I16:
{
GGML_ASSERT(tensor->nb[0] == sizeof(int16_t));
return ((int16_t *)(tensor->data))[i];
} break;
}
case GGML_TYPE_I32:
{
GGML_ASSERT(tensor->nb[0] == sizeof(int32_t));
return ((int32_t *)(tensor->data))[i];
} break;
}
case GGML_TYPE_F16:
{
GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t));
return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]);
} break;
}
case GGML_TYPE_F32:
{
GGML_ASSERT(tensor->nb[0] == sizeof(float));
return ((float *)(tensor->data))[i];
} break;
}
default:
{
GGML_ASSERT(false);
} break;
}
}
return 0.0f;
@ -5141,31 +5141,31 @@ float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i) {
{
GGML_ASSERT(tensor->nb[0] == sizeof(int8_t));
return ((int8_t *)(tensor->data))[i];
} break;
}
case GGML_TYPE_I16:
{
GGML_ASSERT(tensor->nb[0] == sizeof(int16_t));
return ((int16_t *)(tensor->data))[i];
} break;
}
case GGML_TYPE_I32:
{
GGML_ASSERT(tensor->nb[0] == sizeof(int32_t));
return ((int32_t *)(tensor->data))[i];
} break;
}
case GGML_TYPE_F16:
{
GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t));
return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]);
} break;
}
case GGML_TYPE_F32:
{
GGML_ASSERT(tensor->nb[0] == sizeof(float));
return ((float *)(tensor->data))[i];
} break;
}
default:
{
GGML_ASSERT(false);
} break;
}
}
return 0.0f;
@ -18913,7 +18913,7 @@ static enum ggml_opt_result linesearch_backtracking(
(*step) *= width;
}
return GGML_LINESEARCH_FAIL;
GGML_UNREACHABLE();
}
static enum ggml_opt_result ggml_opt_lbfgs(
@ -19165,7 +19165,7 @@ static enum ggml_opt_result ggml_opt_lbfgs(
step[0] = 1.0;
}
return GGML_OPT_DID_NOT_CONVERGE;
GGML_UNREACHABLE();
}
struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type) {

8
ggml.h
View file

@ -248,6 +248,14 @@
} \
} while (0)
#ifndef NDEBUG
#define GGML_UNREACHABLE() GGML_ASSERT(!"statement should not be reached")
#elif defined(__GNUC__)
#define GGML_UNREACHABLE() __builtin_unreachable()
#else
#define GGML_UNREACHABLE() ((void) 0)
#endif
// used to copy the number of elements and stride in bytes of tensors into local variables.
// main purpose is to reduce code duplication and improve readability.
//