diff --git a/common/include/valptridx.h b/common/include/valptridx.h index 51f05ab12..7f4a07a84 100644 --- a/common/include/valptridx.h +++ b/common/include/valptridx.h @@ -49,6 +49,17 @@ protected: DXX_INHERIT_CONSTRUCTORS(c##N##_t, N##_template_t

) \ } \ +#ifdef DXX_HAVE_BUILTIN_CONSTANT_P +#define DXX_VALPTRIDX_STATIC_CHECK(I,E,F,S) \ + if (dxx_builtin_constant_p(I) && !(E)) { \ + void F() __attribute_error(S); \ + F(); \ + } +#else +#define DXX_VALPTRIDX_STATIC_CHECK(I,E,F,S) \ + +#endif + #define DEFINE_VALPTRIDX_SUBTYPE(N,P,I,A) \ _DEFINE_VALPTRIDX_SUBTYPE_HEADER(N,I) \ { \ @@ -57,10 +68,12 @@ protected: N##_template_t(pointer_type t) : \ base_type(t, t-A) \ { \ + DXX_VALPTRIDX_STATIC_CHECK(t, t, dxx_trap_constant_null_pointer, "NULL pointer used"); \ } \ N##_template_t(index_type s) : \ base_type(&A[s], s) \ { \ + DXX_VALPTRIDX_STATIC_CHECK(s, static_cast(s) < A.size(), dxx_trap_constant_invalid_index, "invalid index used in array subscript"); \ } \ template \ N##_template_t(const P##_magic_constant_t &) : \