From 443b1f29155dd2887a76274cb9b9e053c4813ffc Mon Sep 17 00:00:00 2001 From: Kp Date: Wed, 6 Apr 2016 03:34:13 +0000 Subject: [PATCH] Add file/line to valptridx output when available --- SConstruct | 8 ++ common/include/fwd-valptridx.h | 33 ++++++-- common/include/valptridx.h | 137 +++++++++++++++++---------------- common/main/valptridx.tcc | 65 +++++++++++----- 4 files changed, 151 insertions(+), 92 deletions(-) diff --git a/SConstruct b/SConstruct index 6fed6a536..577f21321 100644 --- a/SConstruct +++ b/SConstruct @@ -1033,6 +1033,14 @@ return __builtin_expect(argc == 1, 1) ? 1 : 0; context.sconf.Define('likely(A)', macro_value) context.sconf.Define('unlikely(A)', macro_value) @_custom_test + def check_builtin_file(self,context): + if self.Compile(context, text=''' +static void f(const char * = __builtin_FILE(), unsigned = __builtin_LINE()) +{ +} +''', main='f();', msg='whether compiler accepts __builtin_FILE, __builtin_LINE'): + context.sconf.Define('DXX_HAVE_CXX_BUILTIN_FILE_LINE') + @_custom_test def check_builtin_object_size(self,context): """ Test whether the compiler accepts and optimizes gcc's intrinsic diff --git a/common/include/fwd-valptridx.h b/common/include/fwd-valptridx.h index 5705b512e..79726a0ba 100644 --- a/common/include/fwd-valptridx.h +++ b/common/include/fwd-valptridx.h @@ -4,6 +4,26 @@ #include #include "dxxsconf.h" +#ifdef DXX_HAVE_CXX_BUILTIN_FILE_LINE +#define DXX_VALPTRIDX_ENABLE_REPORT_FILENAME +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_DECL_VARS const char *filename = __builtin_FILE(), const unsigned lineno = __builtin_LINE() +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_L_DECL_VARS , DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_DECL_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_DEFN_VARS const char *filename, const unsigned lineno +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_DEFN_VARS DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_DEFN_VARS, +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_PASS_VARS_ filename, lineno +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_L_PASS_VARS , DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_PASS_VARS_ +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_PASS_VARS DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_PASS_VARS_, +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_PASS_VA(...) DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_PASS_VARS_, ## __VA_ARGS__ +#else +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_DECL_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_L_DECL_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_N_DEFN_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_DEFN_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_L_PASS_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_PASS_VARS +#define DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_PASS_VA(...) __VA_ARGS__ +#endif + /* valptridx_specialized_type is never defined, but is declared to * return a type-specific class suitable for use as a base of * valptridx. @@ -65,14 +85,13 @@ protected: { return get_global_array(p); } - static inline void check_index_match(const_reference_type, index_type, const array_managed_type &); + static inline void check_index_match(DXX_VALPTRIDX_REPORT_STANDARD_LEADER_COMMA_R_DEFN_VARS const_reference_type, index_type, const array_managed_type &); template