Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH] Revert "utf8.h, utfebcdic.h: Add some assertions" #14903

Closed
p5pRT opened this issue Sep 13, 2015 · 20 comments
Closed

[PATCH] Revert "utf8.h, utfebcdic.h: Add some assertions" #14903

p5pRT opened this issue Sep 13, 2015 · 20 comments

Comments

@p5pRT
Copy link

p5pRT commented Sep 13, 2015

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

Searchable as RT126045$

@p5pRT
Copy link
Author

p5pRT commented Sep 13, 2015

From @bulk88

Created by @bulk88

See attached patch.

before
----------------------------------------
C​:\perl521\src\win32>dmake test CCTYPE=MSVC70 CFG=Debug
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
  1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
..\toke.c(3118) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3137) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3660) : warning C4018​: '>' : signed/unsigned mismatch
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001​: INTERNAL COMPILER ERROR
  (compiler file 'msc1.cpp', line 2708)
  Please choose the Technical Support command on the Visual C++
  Help menu, or open the Technical Support help file for more
information

dmake​: Error code 130, while making 'mini\regexec.obj'
C​:\perl521\src\win32>
-------------------------------------------
after
-------------------------------------------
C​:\perl521\src\win32>dmake test CCTYPE=MSVC70 CFG=Debug
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
  1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
..\toke.c(3118) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3137) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3660) : warning C4018​: '>' : signed/unsigned mismatch
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\op.obj -Fdmini\op.pdb ..\op.c
op.c
op.c(8397) : warning C4244​: 'function' : conversion from 'cv_flags_t' to
'char',
  possible loss of data
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\sv.obj -Fdmini\sv.pdb ..\sv.c
sv.c
Caught SIGINT. Trying to quit ...
dmake​:
C​:\perl521\src\win32>
-------------------------------------------

Perl Info

Flags:
     category=core
     severity=low

Site configuration information for perl 5.23.3:

Configured by Owner at Sat Sep 12 17:01:50 2015.

Summary of my perl5 (revision 5 version 23 subversion 3) configuration:
   undef undef
   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 -O1 -MD -Zi -DNDEBUG -GL -DWIN32 
-D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE 
-D_CRT_NONSTDC_NO_DEPRECATE  -DPERL_TEXTMODE_SCRIPTS 
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS',
     optimize='-O1 -MD -Zi -DNDEBUG -GL',
     cppflags='-DWIN32'
     ccversion='14.00.50727.42', gccversion='', gccosandvers=''
     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234, 
doublekind=3
     d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8, 
longdblkind=0
     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 -opt:ref,icf 
-ltcg 		-libpath:"c:\perl\lib\CORE" 		-machine:x86 
"/manifestdependency:type='Win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"'
     libpth=\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=perl523.lib
     gnulibc_version=''
   Dynamic Linking:
     dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
     cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug 
-opt:ref,icf -ltcg 		-libpath:"c:\perl\lib\CORE" 		-machine:x86 
"/manifestdependency:type='Win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"'



@INC for perl 5.23.3:
     C:\perl521\src\lib
     C:\perl521\src\cpan\AutoLoader\lib
     C:\perl521\src\dist\Carp\lib
     C:\perl521\src\dist\PathTools
     C:\perl521\src\dist\PathTools\lib
     C:\perl521\src\cpan\ExtUtils-Command\lib
     C:\perl521\src\cpan\ExtUtils-Install\lib
     C:\perl521\src\cpan\ExtUtils-MakeMaker\lib
     C:\perl521\src\cpan\ExtUtils-Manifest\lib
     C:\perl521\src\cpan\File-Path\lib
     C:\perl521\src\ext\re
     C:\perl521\src\dist\Term-ReadLine\lib
     C:\perl521\src\dist\Exporter\lib
     C:\perl521\src\ext\File-Find\lib
     C:\perl521\src\cpan\Text-Tabs\lib
     C:\perl521\src\dist\constant\lib
     C:\perl521\src\cpan\Text-ParseWords\lib
     C:\perl521\src\dist\ExtUtils-ParseXS\lib
     C:\perl521\src\cpan\Getopt-Long\lib
     C:\perl521\src\cpan\parent\lib
     C:\perl521\src\cpan\ExtUtils-Constant\lib
     .


Environment for perl 5.23.3:
     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
Copy link
Author

p5pRT commented Sep 13, 2015

From @bulk88

0001-Revert-utf8.h-utfebcdic.h-Add-some-assertions.patch
From af3851c8d46d25f5ab5ab6b9a595bdbdb890a92a Mon Sep 17 00:00:00 2001
From: Daniel Dragan <bulk88@hotmail.com>
Date: Sat, 12 Sep 2015 20:15:23 -0400
Subject: [PATCH] Revert "utf8.h, utfebcdic.h: Add some assertions"

This reverts commit e9b19ab7df3480e8f710ca6faad519f6fccdb081.

This fixes a Win32 Visual C 2003 DEBUGGING build failure in compiling
regexec.obj.

cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE                  -O1 -MD -Zi -DDEBUGGING  -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 2708)
         Please choose the Technical Support command on the Visual C++
         Help menu, or open the Technical Support help file for more information

No response from original author of the code at
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230842.html
---
 utf8.h      |    8 ++++----
 utfebcdic.h |   10 ++++------
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/utf8.h b/utf8.h
index 17f0e82..668626f 100644
--- a/utf8.h
+++ b/utf8.h
@@ -127,8 +127,8 @@ END_EXTERN_C
 
 /* Native character to/from iso-8859-1.  Are the identity functions on ASCII
  * platforms */
-#define NATIVE_TO_LATIN1(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
-#define LATIN1_TO_NATIVE(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
+#define NATIVE_TO_LATIN1(ch)     (ch)
+#define LATIN1_TO_NATIVE(ch)     (ch)
 
 /* I8 is an intermediate version of UTF-8 used only in UTF-EBCDIC.  We thus
  * consider it to be identical to UTF-8 on ASCII platforms.  Strictly speaking
@@ -136,8 +136,8 @@ END_EXTERN_C
  * because they are 8-bit encodings that serve the same purpose in Perl, and
  * rarely do we need to distinguish them.  The term "NATIVE_UTF8" applies to
  * whichever one is applicable on the current platform */
-#define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
-#define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) (ch))
+#define NATIVE_UTF8_TO_I8(ch) (ch)
+#define I8_TO_NATIVE_UTF8(ch) (ch)
 
 /* Transforms in wide UV chars */
 #define UNI_TO_NATIVE(ch)        (ch)
diff --git a/utfebcdic.h b/utfebcdic.h
index c852946..003fb79 100644
--- a/utfebcdic.h
+++ b/utfebcdic.h
@@ -133,13 +133,11 @@ END_EXTERN_C
 
 /* EBCDIC-happy ways of converting native code to UTF-8 */
 
-/* Use these when ch is known to be < 256 */
-#define NATIVE_TO_LATIN1(ch)            (__ASSERT_(FITS_IN_8_BITS(ch)) PL_e2a[(U8)(ch)])
-#define LATIN1_TO_NATIVE(ch)            (__ASSERT_(FITS_IN_8_BITS(ch)) PL_a2e[(U8)(ch)])
+#define NATIVE_TO_LATIN1(ch)            PL_e2a[(U8)(ch)]
+#define LATIN1_TO_NATIVE(ch)            PL_a2e[(U8)(ch)]
 
-/* Use these on bytes */
-#define NATIVE_UTF8_TO_I8(b)           (__ASSERT_(FITS_IN_8_BITS(b)) PL_e2utf[(U8)(b)])
-#define I8_TO_NATIVE_UTF8(b)           (__ASSERT_(FITS_IN_8_BITS(b)) PL_utf2e[(U8)(b)])
+#define NATIVE_UTF8_TO_I8(ch)           PL_e2utf[(U8)(ch)]
+#define I8_TO_NATIVE_UTF8(ch)           PL_utf2e[(U8)(ch)]
 
 /* Transforms in wide UV chars */
 #define NATIVE_TO_UNI(ch)    (FITS_IN_8_BITS(ch) ? NATIVE_TO_LATIN1(ch) : (ch))
-- 
1.7.9.msysgit.0

@p5pRT
Copy link
Author

p5pRT commented Sep 18, 2015

From @khwilliamson

On 09/12/2015 06​:25 PM, bulk88 (via RT) wrote​:

# New Ticket Created by bulk88
# Please include the string​: [perl #126045]
# in the subject line of all future correspondence about this issue.
# <URL​: https://rt-archive.perl.org/perl5/Ticket/Display.html?id=126045 >
This reverts commit e9b19ab.

This fixes a Win32 Visual C 2003 DEBUGGING build failure in compiling
regexec.obj.

cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001​: INTERNAL COMPILER ERROR
  (compiler file 'msc1.cpp', line 2708)
  Please choose the Technical Support command on the Visual C++
  Help menu, or open the Technical Support help file for more
information

No response from original author of the code at
http​://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230842.html
===========================
Reverting the patch for the sake of a now-superseded compiler doesn't
make sense. The patch detects array bounds errors on debugging builds
on EBCDIC systems, and on non-EBCDIC systems, it detects code problems
that would cause bounds errors when run on EBCDIC systems.

Of course, we will try to support your compiler, but support for current
z/OS is no less worthy than support of an old, superseded Win32
compiler. And, the EBCDIC portion of the patch has zero effect on
Windows platforms. There must be a better way to get your compiler to
work than to revert this patch. If nothing else, utf8.h could have
#ifndef Win32 to work around the problematic code, but I would think
that there is a way to be more specific to limit things to just the
problematic compilers.

Your final statement quoted above seems to indicate that because I (the
original author) did not respond to an email you posted, that you have
no choice but to revert the whole patch. But I, and most people, aren't
going to respond to non-actionable emails. You said,

"I day or 2 ago on some a now deleted smoke-me branch of khws I got
...[the internal compiler error]."

There is nothing actionable in that. smoke-me branches come and go. This
one was now gone. It seemed likely that this one was superseded by
another one that had fixes in it. You gave no indication that you knew
the failure was from the same set of changes that broke Merijn's
compiler. I typically have several smokes of different things going on
at the same time. I did not see anything I could do about this deleted
code, so didn't respond.

If we found out that the commit was stressing a bunch of different
compilers, then the non-EBCDIC portion might need to be reverted. But
Merijn's compiler (for which we have a work-around) and yours are the
only ones so far.

The bottom line is to submit a patch that gets your compiler to working,
but doesn't affect anyone else's.

This is a bug report for perl from bulk88@​hotmail.com,
generated with the help of perlbug 1.40 running under perl 5.23.3.

-----------------------------------------------------------------
[Please describe your issue here]

See attached patch.

before
----------------------------------------
C​:\perl521\src\win32>dmake test CCTYPE=MSVC70 CFG=Debug
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
..\toke.c(3118) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3137) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3660) : warning C4018​: '>' : signed/unsigned mismatch
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001​: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 2708)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more
information

dmake​: Error code 130, while making 'mini\regexec.obj'
C​:\perl521\src\win32>
-------------------------------------------
after
-------------------------------------------
C​:\perl521\src\win32>dmake test CCTYPE=MSVC70 CFG=Debug
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
..\toke.c(3118) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3137) : warning C4244​: 'function' : conversion from 'IV' to
'const U8'
, possible loss of data
..\toke.c(3660) : warning C4018​: '>' : signed/unsigned mismatch
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\op.obj -Fdmini\op.pdb ..\op.c
op.c
op.c(8397) : warning C4244​: 'function' : conversion from 'cv_flags_t' to
'char',
possible loss of data
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -O1 -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\sv.obj -Fdmini\sv.pdb ..\sv.c
sv.c
Caught SIGINT. Trying to quit ...
dmake​:
C​:\perl521\src\win32>
-------------------------------------------

[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags​:
category=core
severity=low
---
Site configuration information for perl 5.23.3​:

Configured by Owner at Sat Sep 12 17​:01​:50 2015.

Summary of my perl5 (revision 5 version 23 subversion 3) configuration​:
undef undef
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 -O1 -MD -Zi -DNDEBUG -GL -DWIN32
-D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE
-D_CRT_NONSTDC_NO_DEPRECATE -DPERL_TEXTMODE_SCRIPTS
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS',
optimize='-O1 -MD -Zi -DNDEBUG -GL',
cppflags='-DWIN32'
ccversion='14.00.50727.42', gccversion='', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234,
doublekind=3
d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8,
longdblkind=0
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 -opt​:ref,icf
-ltcg -libpath​:"c​:\perl\lib\CORE" -machine​:x86
"/manifestdependency​:type='Win32'
name='Microsoft.Windows.Common-Controls' version='6.0.0.0'
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"'
libpth=\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=perl523.lib
gnulibc_version=''
Dynamic Linking​:
dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug
-opt​:ref,icf -ltcg -libpath​:"c​:\perl\lib\CORE" -machine​:x86
"/manifestdependency​:type='Win32'
name='Microsoft.Windows.Common-Controls' version='6.0.0.0'
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"'

---
@​INC for perl 5.23.3​:
C​:\perl521\src\lib
C​:\perl521\src\cpan\AutoLoader\lib
C​:\perl521\src\dist\Carp\lib
C​:\perl521\src\dist\PathTools
C​:\perl521\src\dist\PathTools\lib
C​:\perl521\src\cpan\ExtUtils-Command\lib
C​:\perl521\src\cpan\ExtUtils-Install\lib
C​:\perl521\src\cpan\ExtUtils-MakeMaker\lib
C​:\perl521\src\cpan\ExtUtils-Manifest\lib
C​:\perl521\src\cpan\File-Path\lib
C​:\perl521\src\ext\re
C​:\perl521\src\dist\Term-ReadLine\lib
C​:\perl521\src\dist\Exporter\lib
C​:\perl521\src\ext\File-Find\lib
C​:\perl521\src\cpan\Text-Tabs\lib
C​:\perl521\src\dist\constant\lib
C​:\perl521\src\cpan\Text-ParseWords\lib
C​:\perl521\src\dist\ExtUtils-ParseXS\lib
C​:\perl521\src\cpan\Getopt-Long\lib
C​:\perl521\src\cpan\parent\lib
C​:\perl521\src\cpan\ExtUtils-Constant\lib
.

---
Environment for perl 5.23.3​:
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
Copy link
Author

p5pRT commented Sep 18, 2015

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

@p5pRT
Copy link
Author

p5pRT commented Sep 24, 2015

From @bulk88

On Thu Sep 17 20​:36​:24 2015, public@​khwilliamson.com wrote​:

No response from original author of the code at
http​://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230842.html
===========================
Reverting the patch for the sake of a now-superseded compiler doesn't
make sense.

P5P supports VC 6 to 2013. Are you announcing that Perl 5.24 has discontinued supporting Visual C?

The patch detects array bounds errors on debugging builds
on EBCDIC systems, and on non-EBCDIC systems, it detects code problems
that would cause bounds errors when run on EBCDIC systems.

Of course, we will try to support your compiler, but support for
current
z/OS is no less worthy than support of an old, superseded Win32
compiler. And, the EBCDIC portion of the patch has zero effect on
Windows platforms. There must be a better way to get your compiler to
work than to revert this patch. If nothing else, utf8.h could have
#ifndef Win32 to work around the problematic code, but I would think
that there is a way to be more specific to limit things to just the
problematic compilers.

Your final statement quoted above seems to indicate that because I
(the
original author) did not respond to an email you posted, that you have
no choice but to revert the whole patch. But I, and most people,
aren't
going to respond to non-actionable emails. You said,

"I day or 2 ago on some a now deleted smoke-me branch of khws I got
...[the internal compiler error]."

There is nothing actionable in that. smoke-me branches come and go.
This
one was now gone. It seemed likely that this one was superseded by
another one that had fixes in it. You gave no indication that you knew
the failure was from the same set of changes that broke Merijn's
compiler. I typically have several smokes of different things going on
at the same time. I did not see anything I could do about this deleted
code, so didn't respond.

If you didn't change anything to address my complaint, and you pushed the code to blead, why would it suddenly stop failing? The only fix that was ever determined in that thread was to change the CC's buffer size for HP CC ( http​://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230941.html ) and nothing was committed to blead since Tux said he needs to test it further. You could have asked/posted "can you still reproduce this problem?" or "file a bug ticket so this isn't forgotten". Instead you never responded at all to me.

If we found out that the commit was stressing a bunch of different
compilers, then the non-EBCDIC portion might need to be reverted. But
Merijn's compiler (for which we have a work-around) and yours are the
only ones so far.

You broke 2 different CCs and didnt know about it until the smoke tests/user reports came in. Perhaps the design of the code/that patch should be rethought instead of figuring out how to fix breakage after the fact and assuming the patch is a golden cow. Using rare uncommon options to fix something says the code is difficult to maintain, and the code should change to meet the CC/interpreter/parser whatever and not "break" on every "upgrade". For that patch an "upgrade" is some new CC or port in the future.

The bottom line is to submit a patch that gets your compiler to
working,
but doesn't affect anyone else's.

Why dont you submit a patch that gets everyone elses compiler working? You are the author of the LOC and the author of the API (FBC_BOUND) in question. If you didn't have a commit bit, your patch would be reverted within a few days if you failed to respond/provide a fix, am I not right?

I did research fixing it myself, but I stopped since you created an macro API (macro FBC_BOUND) that uses implicitly assumes there are certain C autos in scope, which is not allowed by perl's design style policy (there is grandfathered use AFAIK). At that point I stopped thinking of writing a patch since I cant change FBC_BOUND and started bisecting.

FBC_BOUND creation commit
http​://perl5.git.perl.org/perl.git/commitdiff/63ac0dadb1aafcf0c171d3c1422c1923b611b2fc

Blead at http​://perl5.git.perl.org/perl.git/b58e9a87f1dde6553a833962d54161262ba90be5 still has the build failure so it has not been fixed accidentally/unintentionally and this revert patch is still valid.


C​:\perl521\src\win32>dmake mini/regexec.obj CCTYPE=MSVC70 CFG=Debug
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
  1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001​: INTERNAL COMPILER ERROR
  (compiler file 'msc1.cpp', line 2708)
  Please choose the Technical Support command on the Visual C++
  Help menu, or open the Technical Support help file for more information

dmake​: Error code 130, while making 'mini\regexec.obj'

C​:\perl521\src\win32>


The technical problem is "FBC_BOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr, isWORDCHAR_LC_utf8);" is expanding beyond a fixed length buffer in the VC/HP C CPP code. HP C has a buffer change cmd line option, VC does not. For VC the fixed length buffer is probably some power of 2 between 4KB and 64KB including those 2.

As davem suggested in http​://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230968.html you need to turn stuff into functions. You are the creator of every token in the string "FBC_BOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr, isWORDCHAR_LC_utf8);"

http​://perl5.git.perl.org/perl.git/commitdiff/63ac0dadb1aafcf0c171d3c1422c1923b611b2fc
http​://perl5.git.perl.org/perl.git/commitdiff/ca5b5914906cf989a5d5a21f2af8842ab69eb369

Nobody else is going to, or will be competent at refactoring that API except you.

Some people have said on P5P they use DEBUGGING perl for their business code. I dont care about optimizing DEBUGGING perl and never tried, but maybe the speed of DEBUGGING perl should be paid attention to since it affects

1. people paranoid enough to use OpenBSD and/or 100% asserts in all binaries on their system
2. smoke infrastructure/waiting for results

FBC_BOUND expands to pagefuls and pagefuls of code. A CC has to optimize all that code when creating regexec.o slowing down regexec.o compile time (its #3 in perl core on GCC compile time). Also there is a high risk that the same assert check runs multiple times after -O2 optimization due to macros in multieval macros being exponentially expanded. I suspect FBC_BOUND looks more like it should be a function call that calls func pointers from objects since it implements an algorithm that parts are plugged into.

Useless details ahead about Visual C since it is closed source.

A callstack of the assert in Visual C doesn't show enough to be very useful.

  c1.dll!Trap_main_compile() + 0x14e39
  c1.dll!CallMain() + 0x139
  c1.dll!Trap_CallMain() + 0x37
  c1.dll!_InvokeCompilerPass@​12() + 0x21
  cl.exe!execute() + 0x1c1
  cl.exe!dopass() + 0x2be
  cl.exe!passes() + 0x38
  cl.exe!post_compile() + 0x269
  cl.exe!compile() + 0xad
  cl.exe!_main() + 0x4c0
  cl.exe!_mainCRTStartup() + 0x143
  kernel32.dll!_BaseProcessStart@​4() + 0x23

A SEGV exception in the CC.

  c1.dll!tl_getid() - 0xaac7
  c1.dll!can_expand() - 0xb43
  c1.dll!GetTokenFromCurrentChar() + 0x42b5 AKA ?LexerResolveIdentifier@​@​YIPBVToken@​@​PBV1@​_NPA_N@​Z​:
  e87c3a21()

First-chance exception at 0x1061af14 (c1.dll) in cl.exe​: 0xC0000005​: Access violation writing location 0x008c4000.
First-chance exception at 0x1061b034 (c1.dll) in cl.exe​: 0xC0000005​: Access violation writing location 0x008c8000.
First-chance exception at 0x1061ffbe (c1.dll) in cl.exe​: 0xC0000005​: Access violation writing location 0x00dd4000.
First-chance exception at 0x1061ffbe (c1.dll) in cl.exe​: 0xC0000005​: Access violation writing location 0x00dd8000.
First-chance exception at 0x1061b16e (c1.dll) in cl.exe​: 0xC0000005​: Access violation reading location 0x008bb664.

The first couple SEGVs, note all of them are at exactly a page boundary, those pages are allocated by a SEGV handler inside Visual C and execution resumes normally. 0x8c0000 and 0xdd0000 are 5124 KB blocks with only a couple 4KB chunks allocated at the beginning of the 5124KB reserved region/mem obj region. 0x8c0000 and 0xdd0000 memory regions are marked private/directly mmaped/directly VirtualAlloced by the OS, they are not part of malloc. The last SEGV is not at an page boundary and probably is causing the assert fail.

Mem obj 0x8b0000 is a region from 0x8b0000 to 0x8c0000, 64KB big. 0x8b0000 to 0x8b5000 (20KB) is allocated and part of malloc. 0x8b5000 to 0x8c0000 is reserved for malloc to expand into, and it is owned by the malloc code. Faulting address pointer 0x008bb664 is a overflow by 0x008bb664 - 0x8b5000 = 0x6664 bytes or ~26 KB.

The GCC expansion of "FBC_BOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr, isWORDCHAR_LC_utf8);" winds up being 49476 bytes long for me. The VC expansion will be different but IDK if larger or smaller.

Telling malloc to dump itself.

0​:001> !heap -h 0x8b0000
Index Address Name Debugging options enabled
  6​: 008b0000
  Segment at 008b0000 to 008c0000 (00005000 bytes committed)
  Flags​: 00001002
  ForceFlags​: 00000000
  Granularity​: 8 bytes
  Segment Reserve​: 00100000
  Segment Commit​: 00002000
  DeCommit Block Thres​: 00000200
  DeCommit Total Thres​: 00002000
  Total Free Size​: 000001cb
  Max. Allocation Size​: 7ffdefff
  Lock Variable at​: 008b0608
  Next TagIndex​: 0000
  Maximum TagIndex​: 0000
  Tag Entries​: 00000000
  PsuedoTag Entries​: 00000000
  Virtual Alloc List​: 008b0050
  UCR FreeList​: 008b0598
  FreeList Usage​: 00000080 00000000 00000000 00000000
  FreeList[ 00 ] at 008b0178​: 008b24c0 . 008b24c0 (1 block )
  FreeList[ 07 ] at 008b01b0​: 008b4fd0 . 008b4fd0 (1 block )
  Heap entries for Segment00 in Heap 008b0000
  008b0640​: 00640 . 00040 [01] - busy (40)
  008b0680​: 00040 . 01808 [01] - busy (1800)
  008b1e88​: 01808 . 00090 [01] - busy (88)
  008b1f18​: 00090 . 00488 [01] - busy (480)
  008b23a0​: 00488 . 00088 [01] - busy (80)
  008b2428​: 00088 . 00090 [01] - busy (88)
  008b24b8​: 00090 . 00e20 [00]
  008b32d8​: 00e20 . 00228 [01] - busy (220)
  008b3500​: 00228 . 000e0 [01] - busy (d4)
  008b35e0​: 000e0 . 00050 [01] - busy (41)
  008b3630​: 00050 . 00040 [01] - busy (34)
  008b3670​: 00040 . 00048 [01] - busy (39)
  008b36b8​: 00048 . 00048 [01] - busy (3f)
  008b3700​: 00048 . 00020 [01] - busy (13)
  008b3720​: 00020 . 00040 [01] - busy (31)
  008b3760​: 00040 . 00028 [01] - busy (1d)
  008b3788​: 00028 . 00030 [01] - busy (24)
  008b37b8​: 00030 . 00058 [01] - busy (49)
  008b3810​: 00058 . 00020 [01] - busy (14)
  008b3830​: 00020 . 00038 [01] - busy (30)
  008b3868​: 00038 . 00058 [01] - busy (4c)
  008b38c0​: 00058 . 00028 [01] - busy (1b)
  008b38e8​: 00028 . 00018 [01] - busy (e)
  008b3900​: 00018 . 00038 [01] - busy (29)
  008b3938​: 00038 . 00018 [01] - busy (d)
  008b3950​: 00018 . 00030 [01] - busy (27)
  008b3980​: 00030 . 00180 [01] - busy (173)
  008b3b00​: 00180 . 00168 [01] - busy (15b)
  008b3c68​: 00168 . 00028 [01] - busy (1e)
  008b3c90​: 00028 . 00048 [01] - busy (3f)
  008b3cd8​: 00048 . 00028 [01] - busy (1b)
  008b3d00​: 00028 . 00020 [01] - busy (17)
  008b3d20​: 00020 . 00040 [01] - busy (36)
  008b3d60​: 00040 . 00018 [01] - busy (e)
  008b3d78​: 00018 . 004f8 [01] - busy (4ef)
  008b4270​: 004f8 . 00048 [01] - busy (39)
  008b42b8​: 00048 . 00030 [01] - busy (23)
  008b42e8​: 00030 . 00020 [01] - busy (17)
  008b4308​: 00020 . 00028 [01] - busy (1b)
  008b4330​: 00028 . 00050 [01] - busy (44)
  008b4380​: 00050 . 00020 [01] - busy (12)
  008b43a0​: 00020 . 00020 [01] - busy (18)
  008b43c0​: 00020 . 00028 [01] - busy (1e)
  008b43e8​: 00028 . 00018 [01] - busy (c)
  008b4400​: 00018 . 00020 [01] - busy (14)
  008b4420​: 00020 . 00038 [01] - busy (29)
  008b4458​: 00038 . 00018 [01] - busy (f)
  008b4470​: 00018 . 00020 [01] - busy (16)
  008b4490​: 00020 . 00020 [01] - busy (15)
  008b44b0​: 00020 . 00018 [01] - busy (a)
  008b44c8​: 00018 . 00020 [01] - busy (14)
  008b44e8​: 00020 . 00028 [01] - busy (1b)
  008b4510​: 00028 . 00018 [01] - busy (f)
  008b4528​: 00018 . 00038 [01] - busy (2c)
  008b4560​: 00038 . 00048 [01] - busy (40)
  008b45a8​: 00048 . 00058 [01] - busy (50)
  008b4600​: 00058 . 00050 [01] - busy (48)
  008b4650​: 00050 . 00058 [01] - busy (4c)
  008b46a8​: 00058 . 00020 [01] - busy (12)
  008b46c8​: 00020 . 00010 [01] - busy (6)
  008b46d8​: 00010 . 00060 [01] - busy (53)
  008b4738​: 00060 . 00088 [01] - busy (80)
  008b47c0​: 00088 . 00808 [01] - busy (800)
  008b4fc8​: 00808 . 00038 [10]
  008b5000​: 0000b000 - uncommitted bytes.

number in parens is malloc allocation size in hex. If I go plainly by size of the last entry, 0x800 or 2KB, that is the buffer size of the Visual C C preprocessor. The real answer might be more complicated with 0x800 being a truncated 0x10800 or 0x1800. Notice the 0x1800 allocation also. It was filled with alot 0x01, 0x04, and mostly 0x00 bytes, nothing else. The last in malloc heap big 0x800 allocation is a bunch of FILE * from libc. 0x77c5____ are data globals inside msvcrt.dll, including FILE * fd 0,1,2. They might be uninitialized memory from the past.

008b47c0 01 01 11 00 f0 01 08 00 80 fc c5 77 a0 fc c5 77 c0 fc ...........w...w..
008b47d2 c5 77 e0 fc c5 77 00 fd c5 77 20 fd c5 77 40 fd c5 77 .w...w...w ..w@​..w
008b47e4 60 fd c5 77 80 fd c5 77 a0 fd c5 77 c0 fd c5 77 e0 fd `..w...w...w...w..
008b47f6 c5 77 00 fe c5 77 20 fe c5 77 40 fe c5 77 60 fe c5 77 .w...w ..w@​..w`..w
008b4808 80 fe c5 77 a0 fe c5 77 c0 fe c5 77 e0 fe c5 77 00 00 ...w...w...w...w..
008b481a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b482c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b483e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4862 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4874 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4886 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4898 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b48aa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b48bc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b48ce 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b48e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b48f2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4904 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4916 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................
008b4928 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..................

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Nov 3, 2015

From @tonycoz

On Thu Sep 24 04​:11​:58 2015, bulk88 wrote​:

I did research fixing it myself, but I stopped since you created an
macro API (macro FBC_BOUND) that uses implicitly assumes there are
certain C autos in scope, which is not allowed by perl's design style
policy (there is grandfathered use AFAIK). At that point I stopped
thinking of writing a patch since I cant change FBC_BOUND and started
bisecting.

As davem suggested in
http​://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230968.html
you need to turn stuff into functions. You are the creator of every
token in the string "FBC_BOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr,
isWORDCHAR_LC_utf8);"

...

Nobody else is going to, or will be competent at refactoring that API
except you.

I (and I expect khw) don't have the compiler to test with, and it's not being used for smoking.

Only you can test such changes.

I did research fixing it myself, but I stopped since you created
an macro API (macro FBC_BOUND) that uses implicitly assumes there
are certain C autos in scope, which is not allowed by perl's
design style policy (there is grandfathered use AFAIK).

While I think it's bad in general, both the parser and the regexp engine make use of it, and for good reason I think.

Could you please test the branch tonyc/vc2003-macro-issues to see if it crashes VC2003?

Tony

@p5pRT
Copy link
Author

p5pRT commented Nov 3, 2015

From @tonycoz

0001-WIP-test-fix-for-126045-needs-work-needs-testing.patch
From e708ca371e3916d4d43873b94590507b76536a3b Mon Sep 17 00:00:00 2001
From: Tony Cook <tony@develop-help.com>
Date: Tue, 3 Nov 2015 15:27:31 +1100
Subject: WIP test fix for 126045, needs work, needs testing

---
 regexec.c | 48 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 43 insertions(+), 5 deletions(-)

diff --git a/regexec.c b/regexec.c
index 85c31a6..c76190f 100644
--- a/regexec.c
+++ b/regexec.c
@@ -263,6 +263,44 @@ static void S_setup_eval_state(pTHX_ regmatch_info *const reginfo);
 static void S_cleanup_regmatch_info_aux(pTHX_ void *arg);
 static regmatch_state * S_push_slab(pTHX);
 
+/* this needs to check the correct version number for MSVC 2003 */
+#ifdef _MSC_VER
+
+PERL_STATIC_INLINE bool
+S_isWORDCHAR_uni(pTHX_ UV c) {
+    /* macro already does cBOOL() */
+    return isWORDCHAR_uni(c);
+}
+
+PERL_STATIC_INLINE bool
+S_isWORDCHAR_LC_uvchr(pTHX_ UV c) {
+    return isWORDCHAR_LC_uvchr(c);
+}
+
+PERL_STATIC_INLINE bool
+S_isWORDCHAR_utf8(pTHX_ const U8 *p) {
+    return isWORDCHAR_utf8(p);
+}
+
+PERL_STATIC_INLINE bool
+S_isWORDCHAR_LC_utf8(pTHX_ const U8 *p) {
+    return isWORDCHAR_LC_utf8(p);
+}
+
+#define isWORDCHAR_uni_x(c) (S_isWORDCHAR_uni(aTHX_ (c)))
+#define isWORDCHAR_LC_uvchr_x(c) (S_isWORDCHAR_LC_uvchr(aTHX_ (c)))
+#define isWORDCHAR_utf8_x(p) (S_isWORDCHAR_utf8(aTHX_ (p)))
+#define isWORDCHAR_LC_utf8_x(p) (S_isWORDCHAR_LC_utf8(aTHX_ (p)))
+
+#else
+
+#define isWORDCHAR_uni_x isWORDCHAR_uni
+#define isWORDCHAR_LC_uvchr_x isWORDCHAR_LC_uvchr
+#define isWORDCHAR_utf8_x isWORDCHAR_utf8
+#define isWORDCHAR_LC_utf8_x isWORDCHAR_LC_utf8
+
+#endif
+
 #define REGCP_PAREN_ELEMS 3
 #define REGCP_OTHER_ELEMS 3
 #define REGCP_FRAME_ELEMS 1
@@ -2003,7 +2041,7 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
             goto do_boundu;
         }
 
-        FBC_BOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr, isWORDCHAR_LC_utf8);
+        FBC_BOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr_x, isWORDCHAR_LC_utf8_x);
         break;
 
     case NBOUNDL:
@@ -2016,14 +2054,14 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
             goto do_nboundu;
         }
 
-        FBC_NBOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr, isWORDCHAR_LC_utf8);
+        FBC_NBOUND(isWORDCHAR_LC, isWORDCHAR_LC_uvchr_x, isWORDCHAR_LC_utf8_x);
         break;
 
     case BOUND: /* regcomp.c makes sure that this only has the traditional \b
                    meaning */
         assert(FLAGS(c) == TRADITIONAL_BOUND);
 
-        FBC_BOUND(isWORDCHAR, isWORDCHAR_uni, isWORDCHAR_utf8);
+        FBC_BOUND(isWORDCHAR, isWORDCHAR_uni_x, isWORDCHAR_utf8_x);
         break;
 
     case BOUNDA: /* regcomp.c makes sure that this only has the traditional \b
@@ -2037,7 +2075,7 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
                    meaning */
         assert(FLAGS(c) == TRADITIONAL_BOUND);
 
-        FBC_NBOUND(isWORDCHAR, isWORDCHAR_uni, isWORDCHAR_utf8);
+        FBC_NBOUND(isWORDCHAR, isWORDCHAR_uni_x, isWORDCHAR_utf8_x);
         break;
 
     case NBOUNDA: /* regcomp.c makes sure that this only has the traditional \b
@@ -2049,7 +2087,7 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
 
     case NBOUNDU:
         if ((bound_type) FLAGS(c) == TRADITIONAL_BOUND) {
-            FBC_NBOUND(isWORDCHAR_L1, isWORDCHAR_uni, isWORDCHAR_utf8);
+            FBC_NBOUND(isWORDCHAR_L1, isWORDCHAR_uni_x, isWORDCHAR_utf8_x);
             break;
         }
 
-- 
2.1.4

@p5pRT
Copy link
Author

p5pRT commented Nov 28, 2015

From @bulk88

On Mon Nov 02 21​:02​:44 2015, tonyc wrote​:

While I think it's bad in general, both the parser and the regexp
engine make use of it, and for good reason I think.

Could you please test the branch tonyc/vc2003-macro-issues to see if
it crashes VC2003?

Tony

Your branch changes the fatal error from VC 2003 but doesnt fix it.

before


C​:\perl521\src\win32>dmake test
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
  1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001​: INTERNAL COMPILER ERROR
  (compiler file 'msc1.cpp', line 2708)
  Please choose the Technical Support command on the Visual C++
  Help menu, or open the Technical Support help file for more information

dmake​: Error code 130, while making 'mini\regexec.obj'

C​:\perl521\src\win32>


after your patch "* WIP test fix for 126045, needs work, needs testing"


C​:\perl521\src\win32>dmake test
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
  1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING -DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5671) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5671) : error C2026​: string too big, trailing characters truncated
..\regexec.c(5671) : error C2026​: string too big, trailing characters truncated
dmake​: Error code 130, while making 'mini\regexec.obj'

C​:\perl521\src\win32>


The description for C2026 says the buffer is 2KB. https://msdn.microsoft.com/en-us/library/dddywwsc%28v=vs.71%29.aspx

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Jan 4, 2016

From @bulk88

On Sat Nov 28 00​:40​:08 2015, bulk88 wrote​:

On Mon Nov 02 21​:02​:44 2015, tonyc wrote​:

While I think it's bad in general, both the parser and the regexp
engine make use of it, and for good reason I think.

Could you please test the branch tonyc/vc2003-macro-issues to see if
it crashes VC2003?

Tony

Your branch changes the fatal error from VC 2003 but doesnt fix it.

before
------------------------------------------------------
C​:\perl521\src\win32>dmake test
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(2006) : fatal error C1001​: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 2708)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more
information

dmake​: Error code 130, while making 'mini\regexec.obj'

C​:\perl521\src\win32>
------------------------------------------------------

after your patch "* WIP test fix for 126045, needs work, needs
testing"
------------------------------------------------------
C​:\perl521\src\win32>dmake test
if not exist ".\mini" mkdir ".\mini"
if exist config.h del /f config.h
copy config_H.vc config.h
1 file(s) copied.
rem. > .\mini\.exists
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\toke.obj -Fdmini\toke.pdb ..\toke.c
toke.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regcomp.obj -Fdmini\regcomp.pdb ..\regcomp.c
regcomp.c
cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE
-DNO_STRICT -DPERL
DLL -DPERL_CORE -Od -MD -Zi -DDEBUGGING
-DPERL_EXTERNAL_GLOB -
DPERL_IS_MINIPERL -Fomini\regexec.obj -Fdmini\regexec.pdb ..\regexec.c
regexec.c
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5592) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5671) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5671) : error C2026​: string too big, trailing characters
truncated
..\regexec.c(5671) : error C2026​: string too big, trailing characters
truncated
dmake​: Error code 130, while making 'mini\regexec.obj'

C​:\perl521\src\win32>
------------------------------------------------------

The description for C2026 says the buffer is 2KB.
https://msdn.microsoft.com/en-us/library/dddywwsc%28v=vs.71%29.aspx

Bump

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Jan 4, 2016

From @tonycoz

On Sat Nov 28 00​:40​:08 2015, bulk88 wrote​:

On Mon Nov 02 21​:02​:44 2015, tonyc wrote​:

While I think it's bad in general, both the parser and the regexp
engine make use of it, and for good reason I think.

Could you please test the branch tonyc/vc2003-macro-issues to see if
it crashes VC2003?

Tony

Your branch changes the fatal error from VC 2003 but doesnt fix it.

How about the attached?

This follows the approach khw suggested in IRC, assuming I understand what he meant.

The value I'm checking _MSC_VER against came from http​://varlab.blogspot.com.au/2012/11/if-you-develop-applications-for-windows.html so it might need adjustment if that page is incorrect.

Tony

@p5pRT
Copy link
Author

p5pRT commented Jan 4, 2016

From @tonycoz

0001-perl-126045-part-revert-e9b19ab7-for-vc2003-only.patch
From 31c4a31a656328fc3509a6a2abfddf13b345e305 Mon Sep 17 00:00:00 2001
From: Tony Cook <tony@develop-help.com>
Date: Mon, 4 Jan 2016 15:50:59 +1100
Subject: [PATCH] [perl #126045] part revert e9b19ab7 for vc2003 only

This avoids an internal compiler error on VC 2003.
---
 utf8.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/utf8.h b/utf8.h
index 1ed8fd8..5af7dc3 100644
--- a/utf8.h
+++ b/utf8.h
@@ -136,8 +136,13 @@ END_EXTERN_C
 
 /* Native character to/from iso-8859-1.  Are the identity functions on ASCII
  * platforms */
+#if _MSC_VER == 1310
+#define NATIVE_TO_LATIN1(ch)     (ch)
+#define LATIN1_TO_NATIVE(ch)     (ch)
+#else
 #define NATIVE_TO_LATIN1(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
 #define LATIN1_TO_NATIVE(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
+#endif
 
 /* I8 is an intermediate version of UTF-8 used only in UTF-EBCDIC.  We thus
  * consider it to be identical to UTF-8 on ASCII platforms.  Strictly speaking
@@ -145,8 +150,13 @@ END_EXTERN_C
  * because they are 8-bit encodings that serve the same purpose in Perl, and
  * rarely do we need to distinguish them.  The term "NATIVE_UTF8" applies to
  * whichever one is applicable on the current platform */
+#if _MSC_VER == 1310
+#define NATIVE_UTF8_TO_I8(ch) (ch)
+#define I8_TO_NATIVE_UTF8(ch) (ch)
+#else
 #define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
 #define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
+#endif
 
 /* Transforms in wide UV chars */
 #define UNI_TO_NATIVE(ch)        ((UV) (ch))
-- 
1.9.5.msysgit.0

@p5pRT
Copy link
Author

p5pRT commented Jan 15, 2016

From @bulk88

On Sun Jan 03 20​:54​:25 2016, tonyc wrote​:

On Sat Nov 28 00​:40​:08 2015, bulk88 wrote​:

On Mon Nov 02 21​:02​:44 2015, tonyc wrote​:

While I think it's bad in general, both the parser and the regexp
engine make use of it, and for good reason I think.

Could you please test the branch tonyc/vc2003-macro-issues to see
if
it crashes VC2003?

Tony

Your branch changes the fatal error from VC 2003 but doesnt fix it.

How about the attached?

This follows the approach khw suggested in IRC, assuming I understand
what he meant.

The value I'm checking _MSC_VER against came from
http​://varlab.blogspot.com.au/2012/11/if-you-develop-applications-for-
windows.html so it might need adjustment if that page is incorrect.

Tony

the latest patch "part revert e9b19ab for vc2003 only" fixes the problem.

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Jan 15, 2016

From @bulk88

On Fri Jan 15 09​:28​:58 2016, bulk88 wrote​:

On Sun Jan 03 20​:54​:25 2016, tonyc wrote​:

On Sat Nov 28 00​:40​:08 2015, bulk88 wrote​:

On Mon Nov 02 21​:02​:44 2015, tonyc wrote​:

While I think it's bad in general, both the parser and the regexp
engine make use of it, and for good reason I think.

Could you please test the branch tonyc/vc2003-macro-issues to see
if
it crashes VC2003?

Tony

Your branch changes the fatal error from VC 2003 but doesnt fix it.

How about the attached?

This follows the approach khw suggested in IRC, assuming I understand
what he meant.

The value I'm checking _MSC_VER against came from
http​://varlab.blogspot.com.au/2012/11/if-you-develop-applications-for-
windows.html so it might need adjustment if that page is incorrect.

Tony

the latest patch "part revert e9b19ab for vc2003 only" fixes the problem.

Egh, I tested VC6, the CC crashed like VC 2003 does, you need to add VC 6 and 2002 (dont have it) to the no assert logic . I tested VC 2005 and it built fine (no crash, I guess VC 2005 is the first VC to increase its preprocessor buffer size).

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Jan 28, 2016

From @tonycoz

On Fri Jan 15 09​:38​:03 2016, bulk88 wrote​:

On Fri Jan 15 09​:28​:58 2016, bulk88 wrote​:

the latest patch "part revert e9b19ab for vc2003 only" fixes the
problem.

Egh, I tested VC6, the CC crashed like VC 2003 does, you need to add
VC 6 and 2002 (dont have it) to the no assert logic . I tested VC 2005
and it built fine (no crash, I guess VC 2005 is the first VC to
increase its preprocessor buffer size).

Here's an updated patch.

Tony

@p5pRT
Copy link
Author

p5pRT commented Jan 28, 2016

From @tonycoz

0001-perl-126045-part-revert-e9b19ab7-for-vc2003-and-earl.patch
From 228f19ed730b470b3ca2afbbcbed00da8f646466 Mon Sep 17 00:00:00 2001
From: Tony Cook <tony@develop-help.com>
Date: Thu, 28 Jan 2016 15:08:01 +1100
Subject: [perl #126045] part revert e9b19ab7 for vc2003 and earlier

This avoids an internal compiler error on VC 2003 and earlier
---
 utf8.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/utf8.h b/utf8.h
index 1ed8fd8..e523cc3 100644
--- a/utf8.h
+++ b/utf8.h
@@ -134,10 +134,20 @@ EXTCONST unsigned char PL_utf8skip[];
 
 END_EXTERN_C
 
+#if _MSC_VER < 1400
+/* older MSVC versions have a smallish macro buffer */
+#define PERL_SMALL_MACRO_BUFFER
+#endif
+
 /* Native character to/from iso-8859-1.  Are the identity functions on ASCII
  * platforms */
+#ifdef PERL_SMALL_MACRO_BUFFER
+#define NATIVE_TO_LATIN1(ch)     (ch)
+#define LATIN1_TO_NATIVE(ch)     (ch)
+#else
 #define NATIVE_TO_LATIN1(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
 #define LATIN1_TO_NATIVE(ch)     (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
+#endif
 
 /* I8 is an intermediate version of UTF-8 used only in UTF-EBCDIC.  We thus
  * consider it to be identical to UTF-8 on ASCII platforms.  Strictly speaking
@@ -145,8 +155,13 @@ END_EXTERN_C
  * because they are 8-bit encodings that serve the same purpose in Perl, and
  * rarely do we need to distinguish them.  The term "NATIVE_UTF8" applies to
  * whichever one is applicable on the current platform */
+#ifdef PERL_SMALL_MACRO_BUFFER
+#define NATIVE_UTF8_TO_I8(ch) (ch)
+#define I8_TO_NATIVE_UTF8(ch) (ch)
+#else
 #define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
 #define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
+#endif
 
 /* Transforms in wide UV chars */
 #define UNI_TO_NATIVE(ch)        ((UV) (ch))
-- 
1.9.5.msysgit.0

@p5pRT
Copy link
Author

p5pRT commented Jan 28, 2016

From @bulk88

On Wed Jan 27 20​:09​:11 2016, tonyc wrote​:

On Fri Jan 15 09​:38​:03 2016, bulk88 wrote​:

On Fri Jan 15 09​:28​:58 2016, bulk88 wrote​:

the latest patch "part revert e9b19ab for vc2003 only" fixes the
problem.

Egh, I tested VC6, the CC crashed like VC 2003 does, you need to add
VC 6 and 2002 (dont have it) to the no assert logic . I tested VC 2005
and it built fine (no crash, I guess VC 2005 is the first VC to
increase its preprocessor buffer size).

Here's an updated patch.

Tony

new patch works on VC 6 and VC 2003 with DEBUGGING. no CC SEGV or errors.

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Feb 1, 2016

From @tonycoz

On Thu Jan 28 03​:01​:28 2016, bulk88 wrote​:

On Wed Jan 27 20​:09​:11 2016, tonyc wrote​:

On Fri Jan 15 09​:38​:03 2016, bulk88 wrote​:

On Fri Jan 15 09​:28​:58 2016, bulk88 wrote​:

the latest patch "part revert e9b19ab for vc2003 only" fixes the
problem.

Egh, I tested VC6, the CC crashed like VC 2003 does, you need to add
VC 6 and 2002 (dont have it) to the no assert logic . I tested VC 2005
and it built fine (no crash, I guess VC 2005 is the first VC to
increase its preprocessor buffer size).

Here's an updated patch.

new patch works on VC 6 and VC 2003 with DEBUGGING. no CC SEGV or errors.

Thanks for testing, applied as 6f6d1ba.

Tony

@p5pRT
Copy link
Author

p5pRT commented Feb 1, 2016

@tonycoz - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

p5pRT commented May 13, 2016

From @khwilliamson

Thank you for submitting this report. You have helped make Perl better.
 
With the release of Perl 5.24.0 on May 9, 2016, this and 149 other issues have been resolved.

Perl 5.24.0 may be downloaded via https://metacpan.org/release/RJBS/perl-5.24.0

@p5pRT
Copy link
Author

p5pRT commented May 13, 2016

@khwilliamson - Status changed from 'pending release' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant