|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 09/12] Eclair: deviate BUILD_ERROR() wrt rule 2.1 and introduce variants
On Fri, 28 Aug 2026, Jan Beulich wrote:
> BUILD_ERROR() is even stronger a guard than assertions in general, and
> ASSERT_UNREACHABLE() (or BUG()) in particular. Deviate it just like those
> to allow use for marking unreachable portions of code.
>
> In some cases code being unreachable is dependent upon configuration.
> Introduce two variants, as constructs like
>
> if ( IS_ENABLED(CONFIG_...) )
> BUILD_ERROR("...");
>
> results in the if() still being reported as unreachable. Sadly these two
> new macros introduce a new 20.12 violation each, which hence also needs
> deviating.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> @@ -19,6 +19,7 @@ Constant expressions and unreachable bra
>
> -doc_begin="Unreachability inside an ASSERT_UNREACHABLE() and analogous
> macro calls is deliberate and safe."
> -config=MC3A2.R2.1,reports+={deliberate,
> "any_area(any_loc(any_exp(macro(name(ASSERT_UNREACHABLE||PARSE_ERR_RET||PARSE_ERR||FAIL_MSR||FAIL_CPUID)))))"}
> +-config=MC3A2.R2.1,reports+={deliberate,
> "any_area(any_loc(any_exp(macro(^BUILD_ERROR(|_IF(|_NOT))$))))"}
> -doc_end
>
> -doc_begin="The asm-offset files are not linked deliberately, since they are
> used to generate definitions for asm modules."
> @@ -667,6 +668,7 @@ deliberate."
> to the # or ## operators within the following macros are deliberate, to
> provide
> useful diagnostic messages to the user."
> -config=MC3A2.R20.12,macros+={deliberate,
> "name(ASSERT||BUILD_BUG_ON||BUILD_BUG_ON_ZERO||RUNTIME_CHECK)"}
> +-config=MC3A2.R20.12,macros+={deliberate, "^BUILD_ERROR(|_IF(|_NOT))$"}
> -doc_end
>
> -doc_begin="The helper macro GENERATE_CASE may use a macro parameter for
> ordinary
> --- a/xen/include/xen/macros.h
> +++ b/xen/include/xen/macros.h
> @@ -64,6 +64,21 @@
> */
> #define BUILD_ERROR(msg) asm ( ".error \"" msg "\"" )
>
> +/*
> + * Like above, but conditional upon @cfg (not) being enabled. @cfg must be
> + * suitable to pass to IS_ENABLED().
> + */
> +#define BUILD_ERROR_IF(cfg) \
> + (IS_ENABLED(cfg) \
> + ? ({ BUILD_ERROR( #cfg " unexpectedly enabled"); }) \
> + : (void)0)
> +
> +#define BUILD_ERROR_IF_NOT(cfg) \
> + (!IS_ENABLED(cfg) \
> + ? ({ BUILD_ERROR( #cfg " unexpectedly disabled"); }) \
> + : (void)0)
> +
> +
> /* Hide a value from the optimiser. */
> #define HIDE(x) \
> ({ \
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |