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