X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/d1747a5aff00591af555d096abeefe31b18408f6..4b16e2bb0cafabffef653e5dad060dbe68bddcf9:/perl.h diff --git a/perl.h b/perl.h index 8f6dca3..65009e1 100644 --- a/perl.h +++ b/perl.h @@ -116,11 +116,6 @@ /* <--- here ends the logic shared by perl.h and makedef.pl */ -/* Microsoft Visual C++ 6.0 needs special treatment in numerous places */ -#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1300 -# define USING_MSVC6 -#endif - #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C @@ -299,9 +294,112 @@ : (REGEXP *)NULL) #endif +/* In case Configure was not used (we are using a "canned config" + * such as Win32, or a cross-compilation setup, for example) try going + * by the gcc major and minor versions. One useful URL is + * http://www.ohse.de/uwe/articles/gcc-attributes.html, + * but contrary to this information warn_unused_result seems + * not to be in gcc 3.3.5, at least. --jhi + * Also, when building extensions with an installed perl, this allows + * the user to upgrade gcc and get the right attributes, rather than + * relying on the list generated at Configure time. --AD + * Set these up now otherwise we get confused when some of the <*thread.h> + * includes below indirectly pull in (which needs to know if we + * have HASATTRIBUTE_FORMAT). + */ +#ifndef PERL_MICRO +#if defined __GNUC__ && !defined(__INTEL_COMPILER) +# if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */ +# define HASATTRIBUTE_DEPRECATED +# endif +# if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */ +# define HASATTRIBUTE_FORMAT +# if defined __MINGW32__ +# define PRINTF_FORMAT_NULL_OK +# endif +# endif +# if __GNUC__ >= 3 /* 3.0 -> */ +# define HASATTRIBUTE_MALLOC +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */ +# define HASATTRIBUTE_NONNULL +# endif +# if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */ +# define HASATTRIBUTE_NORETURN +# endif +# if __GNUC__ >= 3 /* gcc 3.0 -> */ +# define HASATTRIBUTE_PURE +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ +# define HASATTRIBUTE_UNUSED +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus) +# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */ +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ +# define HASATTRIBUTE_WARN_UNUSED_RESULT +# endif +#endif +#endif /* #ifndef PERL_MICRO */ +#ifdef HASATTRIBUTE_DEPRECATED +# define __attribute__deprecated__ __attribute__((deprecated)) +#endif +#ifdef HASATTRIBUTE_FORMAT +# define __attribute__format__(x,y,z) __attribute__((format(x,y,z))) +#endif +#ifdef HASATTRIBUTE_MALLOC +# define __attribute__malloc__ __attribute__((__malloc__)) +#endif +#ifdef HASATTRIBUTE_NONNULL +# define __attribute__nonnull__(a) __attribute__((nonnull(a))) +#endif +#ifdef HASATTRIBUTE_NORETURN +# define __attribute__noreturn__ __attribute__((noreturn)) +#endif +#ifdef HASATTRIBUTE_PURE +# define __attribute__pure__ __attribute__((pure)) +#endif +#ifdef HASATTRIBUTE_UNUSED +# define __attribute__unused__ __attribute__((unused)) +#endif +#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT +# define __attribute__warn_unused_result__ __attribute__((warn_unused_result)) +#endif +/* If we haven't defined the attributes yet, define them to blank. */ +#ifndef __attribute__deprecated__ +# define __attribute__deprecated__ +#endif +#ifndef __attribute__format__ +# define __attribute__format__(x,y,z) +#endif +#ifndef __attribute__malloc__ +# define __attribute__malloc__ +#endif +#ifndef __attribute__nonnull__ +# define __attribute__nonnull__(a) +#endif +#ifndef __attribute__noreturn__ +# define __attribute__noreturn__ +#endif +#ifndef __attribute__pure__ +# define __attribute__pure__ +#endif +#ifndef __attribute__unused__ +# define __attribute__unused__ +#endif +#ifndef __attribute__warn_unused_result__ +# define __attribute__warn_unused_result__ +#endif + +/* Some OS warn on NULL format to printf */ +#ifdef PRINTF_FORMAT_NULL_OK +# define __attribute__format__null_ok__(x,y,z) __attribute__format__(x,y,z) +#else +# define __attribute__format__null_ok__(x,y,z) +#endif /* * Because of backward compatibility reasons the PERL_UNUSED_DECL @@ -315,20 +413,8 @@ * */ -#if defined(__SYMBIAN32__) && defined(__GNUC__) -# ifdef __cplusplus -# define PERL_UNUSED_DECL -# else -# define PERL_UNUSED_DECL __attribute__((unused)) -# endif -#endif - #ifndef PERL_UNUSED_DECL -# if defined(HASATTRIBUTE_UNUSED) && (!defined(__cplusplus) || __GNUC__ >= 4) -# define PERL_UNUSED_DECL __attribute__unused__ -# else -# define PERL_UNUSED_DECL -# endif +# define PERL_UNUSED_DECL __attribute__unused__ #endif /* gcc -Wall: @@ -395,6 +481,11 @@ # endif #endif +#if defined(_MSC_VER) +/* XXX older MSVC versions have a smallish macro buffer */ +#define PERL_SMALL_MACRO_BUFFER +#endif + /* on gcc (and clang), specify that a warning should be temporarily * ignored; e.g. * @@ -566,11 +657,6 @@ out of them. # define BYTEORDER 0x1234 #endif -/* Overall memory policy? */ -#ifndef CONSERVATIVE -# define LIBERAL 1 -#endif - #if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90 #define ASCIIish #else @@ -647,8 +733,8 @@ out of them. taint_proper(NULL, s); \ } # define TAINT_set(s) (PL_tainted = (s)) -# define TAINT_get (PL_tainted) /* Is something tainted? */ -# define TAINTING_get (PL_tainting) /* Is taint checking enabled? */ +# define TAINT_get (cBOOL(UNLIKELY(PL_tainted))) /* Is something tainted? */ +# define TAINTING_get (cBOOL(UNLIKELY(PL_tainting))) /* Is taint checking enabled? */ # define TAINTING_set(s) (PL_tainting = (s)) # define TAINT_WARN_get (PL_taint_warn) /* FALSE => tainting violations are fatal @@ -1830,11 +1916,10 @@ typedef UVTYPE UV; # else # undef IV_IS_QUAD # undef UV_IS_QUAD -#if !defined(PERL_CORE) || defined(USING_MSVC6) +#if !defined(PERL_CORE) /* We think that removing this decade-old undef this will cause too much breakage on CPAN for too little gain. (See RT #119753) - However, we do need HAS_QUAD in the core for use by the drand48 code, - but not for Win32 VC6 because it has poor __int64 support. */ + However, we do need HAS_QUAD in the core for use by the drand48 code. */ # undef HAS_QUAD #endif # endif @@ -1926,11 +2011,6 @@ typedef NVTYPE NV; # include #endif -#ifdef USING_MSVC6 -/* VC6 has broken NaN semantics: NaN == NaN returns true instead of false, - * and for example NaN < IV_MIN. */ -# define NAN_COMPARE_BROKEN -#endif #if defined(__DECC) && defined(__osf__) /* Also Tru64 cc has broken NaN comparisons. */ # define NAN_COMPARE_BROKEN @@ -2804,6 +2884,34 @@ typedef struct padname PADNAME; # define USE_ENVIRON_ARRAY #endif + +#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) + /* having sigaction(2) means that the OS supports both 1-arg and 3-arg + * signal handlers. But the perl core itself only fully supports 1-arg + * handlers, so don't enable for now. + * NB: POSIX::sigaction() supports both. + * + * # define PERL_USE_3ARG_SIGHANDLER + */ +#endif + +/* Siginfo_t: + * This is an alias for the OS's siginfo_t, except that where the OS + * doesn't support it, declare a dummy version instead. This allows us to + * have signal handler functions which always have a Siginfo_t parameter + * regardless of platform, (and which will just be passed a NULL value + * where the OS doesn't support HAS_SIGACTION). + */ + +#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) + typedef siginfo_t Siginfo_t; +#else + typedef struct { + int si_signo; + } Siginfo_t; +#endif + + /* * initialise to avoid floating-point exceptions from overflow, etc */ @@ -2921,55 +3029,6 @@ freeing any remaining Perl interpreters. # endif #endif -/* In case Configure was not used (we are using a "canned config" - * such as Win32, or a cross-compilation setup, for example) try going - * by the gcc major and minor versions. One useful URL is - * http://www.ohse.de/uwe/articles/gcc-attributes.html, - * but contrary to this information warn_unused_result seems - * not to be in gcc 3.3.5, at least. --jhi - * Also, when building extensions with an installed perl, this allows - * the user to upgrade gcc and get the right attributes, rather than - * relying on the list generated at Configure time. --AD - * Set these up now otherwise we get confused when some of the <*thread.h> - * includes below indirectly pull in (which needs to know if we - * have HASATTRIBUTE_FORMAT). - */ - -#ifndef PERL_MICRO -#if defined __GNUC__ && !defined(__INTEL_COMPILER) -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */ -# define HASATTRIBUTE_DEPRECATED -# endif -# if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */ -# define HASATTRIBUTE_FORMAT -# if defined __MINGW32__ -# define PRINTF_FORMAT_NULL_OK -# endif -# endif -# if __GNUC__ >= 3 /* 3.0 -> */ -# define HASATTRIBUTE_MALLOC -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */ -# define HASATTRIBUTE_NONNULL -# endif -# if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */ -# define HASATTRIBUTE_NORETURN -# endif -# if __GNUC__ >= 3 /* gcc 3.0 -> */ -# define HASATTRIBUTE_PURE -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ -# define HASATTRIBUTE_UNUSED -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus) -# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */ -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ -# define HASATTRIBUTE_WARN_UNUSED_RESULT -# endif -#endif -#endif /* #ifndef PERL_MICRO */ - /* USE_5005THREADS needs to be after unixish.h as includes * which defines NSIG - which will stop inclusion of * this results in many functions being undeclared which bothers C++ @@ -3486,7 +3545,13 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) #define HEKfARG(p) ((void*)(p)) -/* Takes three arguments: is_utf8, length, str */ +/* +=for apidoc Amnh||UTF8f +=for apidoc Amh||UTF8fARG|bool is_utf8|Size_t byte_len|char *str + +=cut + * %4p is a custom format + */ #ifndef UTF8f # define UTF8f "d%" UVuf "%4p" #endif @@ -3502,57 +3567,6 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) # define UVf UVuf #endif -#ifdef HASATTRIBUTE_DEPRECATED -# define __attribute__deprecated__ __attribute__((deprecated)) -#endif -#ifdef HASATTRIBUTE_FORMAT -# define __attribute__format__(x,y,z) __attribute__((format(x,y,z))) -#endif -#ifdef HASATTRIBUTE_MALLOC -# define __attribute__malloc__ __attribute__((__malloc__)) -#endif -#ifdef HASATTRIBUTE_NONNULL -# define __attribute__nonnull__(a) __attribute__((nonnull(a))) -#endif -#ifdef HASATTRIBUTE_NORETURN -# define __attribute__noreturn__ __attribute__((noreturn)) -#endif -#ifdef HASATTRIBUTE_PURE -# define __attribute__pure__ __attribute__((pure)) -#endif -#ifdef HASATTRIBUTE_UNUSED -# define __attribute__unused__ __attribute__((unused)) -#endif -#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT -# define __attribute__warn_unused_result__ __attribute__((warn_unused_result)) -#endif - -/* If we haven't defined the attributes yet, define them to blank. */ -#ifndef __attribute__deprecated__ -# define __attribute__deprecated__ -#endif -#ifndef __attribute__format__ -# define __attribute__format__(x,y,z) -#endif -#ifndef __attribute__malloc__ -# define __attribute__malloc__ -#endif -#ifndef __attribute__nonnull__ -# define __attribute__nonnull__(a) -#endif -#ifndef __attribute__noreturn__ -# define __attribute__noreturn__ -#endif -#ifndef __attribute__pure__ -# define __attribute__pure__ -#endif -#ifndef __attribute__unused__ -# define __attribute__unused__ -#endif -#ifndef __attribute__warn_unused_result__ -# define __attribute__warn_unused_result__ -#endif - #if !defined(DEBUGGING) && !defined(NDEBUG) # define NDEBUG 1 #endif @@ -3567,13 +3581,6 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) # define NORETURN_FUNCTION_END NOT_REACHED; return 0 #endif -/* Some OS warn on NULL format to printf */ -#ifdef PRINTF_FORMAT_NULL_OK -# define __attribute__format__null_ok__(x,y,z) __attribute__format__(x,y,z) -#else -# define __attribute__format__null_ok__(x,y,z) -#endif - #ifdef HAS_BUILTIN_EXPECT # define EXPECT(expr,val) __builtin_expect(expr,val) #else @@ -3614,8 +3621,11 @@ hint to the compiler that this condition is likely to be false. STATIC_ASSERT_STMT expands to a statement and is suitable for use inside a function. */ -#if (defined(static_assert) || (defined(__cplusplus) && __cplusplus >= 201103L)) && (!defined(__IBMC__) || __IBMC__ >= 1210) -/* static_assert is a macro defined in in C11 or a compiler +#if (! defined(__IBMC__) || __IBMC__ >= 1210) \ + && (( defined(static_assert) && ( defined(_ISOC11_SOURCE) \ + || (__STDC_VERSION__ - 0) >= 201101L)) \ + || (defined(__cplusplus) && __cplusplus >= 201103L)) +/* XXX static_assert is a macro defined in in C11 or a compiler builtin in C++11. But IBM XL C V11 does not support _Static_assert, no matter what says. */ @@ -3817,13 +3827,13 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */ /* macros to define bit-fields in structs. */ #ifndef PERL_BITFIELD8 -# define PERL_BITFIELD8 unsigned +# define PERL_BITFIELD8 U8 #endif #ifndef PERL_BITFIELD16 -# define PERL_BITFIELD16 unsigned +# define PERL_BITFIELD16 U16 #endif #ifndef PERL_BITFIELD32 -# define PERL_BITFIELD32 unsigned +# define PERL_BITFIELD32 U32 #endif #include "sv.h" @@ -4099,7 +4109,8 @@ Gid_t getegid (void); #define DEBUG_B_FLAG 0x02000000 /*33554432*/ #define DEBUG_L_FLAG 0x04000000 /*67108864*/ #define DEBUG_i_FLAG 0x08000000 /*134217728*/ -#define DEBUG_MASK 0x0FFFEFFF /* mask of all the standard flags */ +#define DEBUG_y_FLAG 0x10000000 /*268435456*/ +#define DEBUG_MASK 0x1FFFEFFF /* mask of all the standard flags */ #define DEBUG_DB_RECURSE_FLAG 0x40000000 #define DEBUG_TOP_FLAG 0x80000000 /* -D was given --> PL_debug |= FLAG */ @@ -4131,10 +4142,12 @@ Gid_t getegid (void); # define DEBUG_B_TEST_ UNLIKELY(PL_debug & DEBUG_B_FLAG) # define DEBUG_L_TEST_ UNLIKELY(PL_debug & DEBUG_L_FLAG) # define DEBUG_i_TEST_ UNLIKELY(PL_debug & DEBUG_i_FLAG) +# define DEBUG_y_TEST_ UNLIKELY(PL_debug & DEBUG_y_FLAG) # define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_) # define DEBUG_Uv_TEST_ (DEBUG_U_TEST_ && DEBUG_v_TEST_) # define DEBUG_Pv_TEST_ (DEBUG_P_TEST_ && DEBUG_v_TEST_) # define DEBUG_Lv_TEST_ (DEBUG_L_TEST_ && DEBUG_v_TEST_) +# define DEBUG_yv_TEST_ (DEBUG_y_TEST_ && DEBUG_v_TEST_) #ifdef DEBUGGING @@ -4165,10 +4178,12 @@ Gid_t getegid (void); # define DEBUG_B_TEST DEBUG_B_TEST_ # define DEBUG_L_TEST DEBUG_L_TEST_ # define DEBUG_i_TEST DEBUG_i_TEST_ +# define DEBUG_y_TEST DEBUG_y_TEST_ # define DEBUG_Xv_TEST DEBUG_Xv_TEST_ # define DEBUG_Uv_TEST DEBUG_Uv_TEST_ # define DEBUG_Pv_TEST DEBUG_Pv_TEST_ # define DEBUG_Lv_TEST DEBUG_Lv_TEST_ +# define DEBUG_yv_TEST DEBUG_yv_TEST_ # define PERL_DEB(a) a # define PERL_DEB2(a,b) a @@ -4217,6 +4232,7 @@ Gid_t getegid (void); # define DEBUG_Uv(a) DEBUG__(DEBUG_Uv_TEST, a) # define DEBUG_Pv(a) DEBUG__(DEBUG_Pv_TEST, a) # define DEBUG_Lv(a) DEBUG__(DEBUG_Lv_TEST, a) +# define DEBUG_yv(a) DEBUG__(DEBUG_yv_TEST, a) # define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a) # define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a) @@ -4229,6 +4245,7 @@ Gid_t getegid (void); # define DEBUG_B(a) DEBUG__(DEBUG_B_TEST, a) # define DEBUG_L(a) DEBUG__(DEBUG_L_TEST, a) # define DEBUG_i(a) DEBUG__(DEBUG_i_TEST, a) +# define DEBUG_y(a) DEBUG__(DEBUG_y_TEST, a) #else /* ! DEBUGGING below */ @@ -4259,10 +4276,12 @@ Gid_t getegid (void); # define DEBUG_B_TEST (0) # define DEBUG_L_TEST (0) # define DEBUG_i_TEST (0) +# define DEBUG_y_TEST (0) # define DEBUG_Xv_TEST (0) # define DEBUG_Uv_TEST (0) # define DEBUG_Pv_TEST (0) # define DEBUG_Lv_TEST (0) +# define DEBUG_yv_TEST (0) # define PERL_DEB(a) # define PERL_DEB2(a,b) b @@ -4293,10 +4312,12 @@ Gid_t getegid (void); # define DEBUG_B(a) # define DEBUG_L(a) # define DEBUG_i(a) +# define DEBUG_y(a) # define DEBUG_Xv(a) # define DEBUG_Uv(a) # define DEBUG_Pv(a) # define DEBUG_Lv(a) +# define DEBUG_yv(a) #endif /* DEBUGGING */ @@ -4616,12 +4637,14 @@ EXTCONST char PL_no_dir_func[] EXTCONST char PL_no_func[] INIT("The %s function is unimplemented"); EXTCONST char PL_no_myglob[] - INIT("\"%s\" %se %s can't be in a package"); + INIT("\"%s\" %s %s can't be in a package"); EXTCONST char PL_no_localize_ref[] INIT("Can't localize through a reference"); EXTCONST char PL_memory_wrap[] INIT("panic: memory wrap"); - +EXTCONST char PL_extended_cp_format[] + INIT("Code point 0x%" UVXf " is not Unicode, requires a Perl extension," + " and so is not portable"); EXTCONST char PL_Yes[] INIT("1"); EXTCONST char PL_No[] @@ -6853,6 +6876,14 @@ C. # define Atoul(s) Strtoul(s, NULL, 10) #endif +#define grok_bin(s,lp,fp,rp) \ + grok_bin_oct_hex(s, lp, fp, rp, 1, _CC_BINDIGIT, 'b') +#define grok_oct(s,lp,fp,rp) \ + (*(fp) |= PERL_SCAN_DISALLOW_PREFIX, \ + grok_bin_oct_hex(s, lp, fp, rp, 3, _CC_OCTDIGIT, '\0')) +#define grok_hex(s,lp,fp,rp) \ + grok_bin_oct_hex(s, lp, fp, rp, 4, _CC_XDIGIT, 'x') + #ifndef PERL_SCRIPT_MODE #define PERL_SCRIPT_MODE "r" #endif @@ -7031,7 +7062,7 @@ C. #endif #if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO) -int flock(int fd, int op); +EXTERN_C int flock(int fd, int op); #endif #ifndef O_RDONLY @@ -7096,17 +7127,39 @@ A synonym for L */ #define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) -/* Input flags: */ +/* Number scan flags. All are used for input, the ones used for output are so + * marked */ #define PERL_SCAN_ALLOW_UNDERSCORES 0x01 /* grok_??? accept _ in numbers */ #define PERL_SCAN_DISALLOW_PREFIX 0x02 /* grok_??? reject 0x in hex etc */ -#define PERL_SCAN_SILENT_ILLDIGIT 0x04 /* grok_??? not warn about illegal digits */ -#define PERL_SCAN_SILENT_NON_PORTABLE 0x08 /* grok_??? not warn about very large - numbers which are <= UV_MAX */ + +/* grok_??? input: ignored; output: found overflow */ +#define PERL_SCAN_GREATER_THAN_UV_MAX 0x04 + +/* grok_??? don't warn about illegal digits. To preserve total backcompat, + * this isn't set on output if one is found. Instead, see + * PERL_SCAN_NOTIFY_ILLDIGIT. */ +#define PERL_SCAN_SILENT_ILLDIGIT 0x08 + #define PERL_SCAN_TRAILING 0x10 /* grok_number_flags() allow trailing and set IS_NUMBER_TRAILING */ -/* Output flags: */ -#define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 /* should this merge with above? */ +/* These are considered experimental, so not exposed publicly */ +#if defined(PERL_CORE) || defined(PERL_EXT) +/* grok_??? don't warn about very large numbers which are <= UV_MAX; + * output: found such a number */ +# define PERL_SCAN_SILENT_NON_PORTABLE 0x20 + +/* If this is set on input, and no illegal digit is found, it will be cleared + * on output; otherwise unchanged */ +# define PERL_SCAN_NOTIFY_ILLDIGIT 0x40 + +/* Don't warn on overflow; output flag still set */ +# define PERL_SCAN_SILENT_OVERFLOW 0x80 + +/* Forbid a leading underscore, which the other one doesn't */ +# define PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES (0x100|PERL_SCAN_ALLOW_UNDERSCORES) +#endif + /* to let user control profiling */ #ifdef PERL_GPROF_CONTROL @@ -7483,8 +7536,9 @@ START_EXTERN_C */ /* The quadmath literals are anon structs which -Wc++-compat doesn't like. */ -GCC_DIAG_IGNORE_DECL(-Wpragmas); +# ifndef USE_CPLUSPLUS GCC_DIAG_IGNORE_DECL(-Wc++-compat); +# endif # ifdef USE_QUADMATH /* Cannot use HUGE_VALQ for PL_inf because not a compile-time @@ -7554,8 +7608,9 @@ INFNAN_NV_U8_DECL PL_nan = { 0.0/0.0 }; /* keep last */ # endif # endif +# ifndef USE_CPLUSPLUS GCC_DIAG_RESTORE_DECL; -GCC_DIAG_RESTORE_DECL; +# endif #else