Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.91k stars 543 forks source link

commit "add op_comp field to regexp_engine API" caused a function pointer prototype mismatch #14135

Closed p5pRT closed 9 years ago

p5pRT commented 9 years ago

Migrated from rt.perl.org#122911 (status was 'resolved')

Searchable as RT122911$

p5pRT commented 9 years ago

From @bulk88

Created by @bulk88

Commit "add op_comp field to regexp_engine API" 3c13cae629d936c43bca9d992cc445d93287af8e by Dave M added a compiler warning on VC 6\, that needs to get silenced.

-----------------------------------------------------------------   cl -c -nologo -GF -W3 -I..\lib\CORE -I.\include -I. -I.. -DWIN32 -D_CONS OLE -DNO_STRICT -DPERLDLL -DPERL_CORE -O1 -MD -Zi -DNDEBUG -DPERL_EXTERNAL_GLO B -DPERL_IS_MINIPERL -Fo.\mini\pp_ctl.obj ..\pp_ctl.c pp_ctl.c ..\pp_ctl.c(122) : warning C4028​: formal parameter 5 different from declaration -----------------------------------------------------------------   new_re = (eng->op_comp   ? eng->op_comp   : &Perl_re_op_compile   )(aTHX_ args\, nargs\, pm->op_code_list\, eng\, re\,\<\<\<\<\<Line 122   &is_bare_re\,   (pm->op_pmflags & RXf_PMf_FLAGCOPYMASK)\,   pm->op_pmflags |   (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0)); -----------------------------------------------------------------

In the commit Dave M added a "VOL" token which becomes volatile after CPP\, commit message doesn't give any clue to why its there (WAG\, compiler bug somewhere? if so it must be documented).

----------------------------------- regexp.h ----------------------------------- index 8b19055..b4427d3 100644 @​@​ -159\,14 +159\,18 @​@​ typedef struct regexp_engine {   SV * const value\, const U32 flags);   SV* (*named_buff_iter) (pTHX_ REGEXP * const rx\, const SV * const lastkey\,   const U32 flags);   SV* (*qr_package)(pTHX_ REGEXP * const rx); #ifdef USE_ITHREADS   void* (*dupe) (pTHX_ REGEXP * const rx\, CLONE_PARAMS *param); #endif + REGEXP* (*op_comp) (pTHX_ SV ** const patternp\, int pat_count\, + OP *expr\, const struct regexp_engine* eng\, + REGEXP *VOL old_re\, + int *is_bare_re\, U32 orig_rx_flags\, U32 pm_flags); } regexp_engine; -------------------------------------------------------- expanded CPP -------------------------------------------------------   REGEXP* (*op_comp) (PerlInterpreter* my_perl \, SV ** const patternp\, int pat_count\,   OP *expr\, const struct regexp_engine* eng\,   REGEXP *volatile old_re\,   char *is_bare_re\, U32 orig_rx_flags\, U32 pm_flags); -------------------------------------------------------

but the prototype of function pointer Perl_re_op_compile (the other operand of the ?​:) doesnt have volatile flag\, and triggers the "warning C4028​: formal parameter 5 different from declaration"

------------------------------------------------------- REGEXP * Perl_re_op_compile(pTHX_ SV ** const patternp\, int pat_count\,   OP *expr\, const regexp_engine* eng\, REGEXP *old_re\,   bool *is_bare_re\, U32 orig_rx_flags\, U32 pm_flags) { -------------------------------------------------------

So why is volatile in proto for op_comp member?

Perl Info ``` Flags: category=core severity=low Site configuration information for perl 5.21.2: Configured by Owner at Tue Sep 23 02:37:36 2014. Summary of my perl5 (revision 5 version 21 subversion 2) configuration: Derived from: 101c6642b743a0f82b7806d5a14d645731f1509c Ancestor: 8eaff90c13544b96799fc27a09c05dec3d2706c9 Platform: osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -Od -MD -Zi -DDEBUGGING -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_TIME -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T', optimize='-Od -MD -Zi -DDEBUGGING', cppflags='-DWIN32' ccversion='13.10.6030', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -libpath:"c:\perl521\lib\CORE" -machine:x86' libpth="C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\lib" libs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl521.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -libpath:"c:\perl521\lib\CORE" -machine:x86' Locally applied patches: uncommitted-changes 22eb0703e4f1ca0305ca22390770b019a4b0ec4c ab36ae0a3ee81e650c6775a6e779fd961d14a2df 7374111ae13f4be3f77c384a6ed74d26608a6d94 543c0e688ee3c5a452b9203e04eee8a0f448ecfa 68a4b64dc9a9688bb38aabd2dd076a93805c5d0a 2bfbae23de43234000b13d68be2d6c2e17642f52 d56c627eaf78528a30b6e2e11f11f4a310f6b738 568f0b08dbad76dcd72664e258a9504bcc2b1246 101c6642b743a0f82b7806d5a14d645731f1509c @INC for perl 5.21.2: C:/perl521/site/lib C:/perl521/lib . Environment for perl 5.21.2: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=C:\perl521\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\BIN;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin\prerelease;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\wbem; PERL_BADLANG (unset) SHELL (unset) ```
p5pRT commented 9 years ago

From @cpansprout

On Sun Oct 05 11​:36​:13 2014\, bulk88 wrote​:

In the commit Dave M added a "VOL" token which becomes volatile after CPP\, commit message doesn't give any clue to why its there (WAG\, compiler bug somewhere? if so it must be documented).

I think it can be removed. See 1067df30ae9.

--

Father Chrysostomos

p5pRT commented 9 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 9 years ago

From @iabyn

On Sun\, Oct 05\, 2014 at 12​:58​:09PM -0700\, Father Chrysostomos via RT wrote​:

On Sun Oct 05 11​:36​:13 2014\, bulk88 wrote​:

In the commit Dave M added a "VOL" token which becomes volatile after CPP\, commit message doesn't give any clue to why its there (WAG\, compiler bug somewhere? if so it must be documented).

I think it can be removed. See 1067df30ae9.

agreed

-- You never really learn to swear until you learn to drive.

p5pRT commented 9 years ago

From @cpansprout

On Mon Oct 06 05​:41​:08 2014\, davem wrote​:

On Sun\, Oct 05\, 2014 at 12​:58​:09PM -0700\, Father Chrysostomos via RT wrote​:

On Sun Oct 05 11​:36​:13 2014\, bulk88 wrote​:

In the commit Dave M added a "VOL" token which becomes volatile after CPP\, commit message doesn't give any clue to why its there (WAG\, compiler bug somewhere? if so it must be documented).

I think it can be removed. See 1067df30ae9.

agreed

I have removed it in 7984ae89f.

--

Father Chrysostomos

p5pRT commented 9 years ago

@cpansprout - Status changed from 'open' to 'resolved'