Bug 1201 - regex.h problem when compiling with g++
Summary: regex.h problem when compiling with g++
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: regex (show other bugs)
Version: 2.3.5
: P2 normal
Target Milestone: ---
Assignee: GOTO Masanori
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-08-16 00:00 UTC by Paul Eggert
Modified: 2019-04-10 09:58 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments
patch for regex.h problem with g++ (359 bytes, patch)
2005-08-16 00:01 UTC, Paul Eggert
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Eggert 2005-08-16 00:00:05 UTC
This bug report follows up on a gnulib bug whose patch is here:

http://lists.gnu.org/archive/html/bug-gnulib/2005-08/msg00003.html

The problem is that when g++ is used to compile regex.h in the gnulib
context, it gets the diagnostics:

regex.h:569: error: expected primary-expression before "__restrict__"
regex.h:569: error: expected `]' before "__restrict__"
regex.h:569: error: expected `,' or `...' before "__restrict__"

I'll attach the patch.
Comment 1 Paul Eggert 2005-08-16 00:01:04 UTC
Created attachment 589 [details]
patch for regex.h problem with g++
Comment 2 Ulrich Drepper 2005-09-06 16:46:14 UTC
The patch is wrong.  g++ does support __restrict.  There might be some versions
which didn't but this does not mean all version can be excluded.
Comment 3 Paul Eggert 2006-04-11 07:21:46 UTC
I don't know which versions of g++ you're talking about, but the
abovementioned bug report from Bruno Haible says that no version of
g++ in the 3.2.*, 3.3.*, 3.4.*, 4.0.[01] series supports the
[__restrict] syntax, and I just now verified that g++ 4.1.0 does not
support it either; please see the shell transcript below.

Perhaps you confused __restrict with [__restrict]?  This change talks
about the latter, not the former.


586-penguin $ g++ -c t.cc
t.cc:21: error: expected primary-expression before '__restrict__'
t.cc:21: error: expected `]' before '__restrict__'
t.cc:21: error: expected ',' or '...' before '__restrict__'
587-penguin $ gcc -c t.cc
t.cc:21: error: expected primary-expression before '__restrict__'
t.cc:21: error: expected `]' before '__restrict__'
t.cc:21: error: expected ',' or '...' before '__restrict__'
588-penguin $ cp t.cc t.c; gcc -c t.c
589-penguin $ gcc --version | sed 1q
gcc (GCC) 4.1.0
590-penguin $ g++ --version | sed 1q
g++ (GCC) 4.1.0
591-penguin $ cat t.cc
#ifndef __restrict
# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
#  if defined restrict || 199901L <= __STDC_VERSION__
#   define __restrict restrict
#  else
#   define __restrict
#  endif
# endif
#endif
/* gcc 3.1 and up support the [restrict] syntax.  */
#ifndef __restrict_arr
# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
#  define __restrict_arr __restrict
# else
#  define __restrict_arr
# endif
#endif

extern int regexec (const int *__restrict __preg,
		    const char *__restrict __string, int __nmatch,
		    int __pmatch[__restrict_arr],
		    int __eflags);
Comment 4 Ulrich Drepper 2006-05-02 21:37:27 UTC
I checked in an appropriate patch.