re PR c/5059 (Compiling s/w containing the use of DIR.H fails on other stat-calls)

* config/alpha/osf.h (TARGET_OS_CPP_BUILTINS): Rename
	__EXTERN_PREFIX to __PRAGMA_EXTERN_PREFIX.
	* doc/extend.texi (Tru64 Pragmas): Reflect this.

	* fixinc/inclhack.def (alpha___extern_prefix): Indicate #pragma
	extern_prefix support for Tru64 UNIX V5 <sys/stat.h>.
	* fixinc/fixincl.x: Regenerate.
	* fixinc/tests/base/sys/stat.h [ALPHA___EXTERN_PREFIX_CHECK]: New
	testcase.
	Fixes PR c/5059, c/6126, other/9671.

	testsuite:
	* g++.dg/other/pragma-ep-1.C: Test for __PRAGMA_EXTERN_PREFIX.
	* gcc.dg/pragma-ep-1.c: Likewise.

From-SVN: r63370
This commit is contained in:
Rainer Orth 2003-02-24 18:52:51 +00:00 committed by Rainer Orth
parent 391cd0955e
commit f8dc212b5d
8 changed files with 97 additions and 19 deletions

View File

@ -1,3 +1,16 @@
2003-02-24 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* config/alpha/osf.h (TARGET_OS_CPP_BUILTINS): Rename
__EXTERN_PREFIX to __PRAGMA_EXTERN_PREFIX.
* doc/extend.texi (Tru64 Pragmas): Reflect this.
* fixinc/inclhack.def (alpha___extern_prefix): Indicate #pragma
extern_prefix support for Tru64 UNIX V5 <sys/stat.h>.
* fixinc/fixincl.x: Regenerate.
* fixinc/tests/base/sys/stat.h [ALPHA___EXTERN_PREFIX_CHECK]: New
testcase.
Fixes PR c/5059, c/6126, other/9671.
2003-02-24 Roger Sayle <roger@eyesopen.com>
* gcc.c (do_spec_1) ['{']: Handle pending argument upon return

View File

@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for DEC Alpha on OSF/1.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003
Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
@ -32,21 +32,21 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
#define TARGET_OS_CPP_BUILTINS() \
do { \
builtin_define_std ("unix"); \
builtin_define_std ("SYSTYPE_BSD"); \
builtin_define ("_SYSTYPE_BSD"); \
builtin_define ("__osf__"); \
builtin_define ("_LONGLONG"); \
builtin_define ("__EXTERN_PREFIX"); \
builtin_assert ("system=unix"); \
builtin_assert ("system=xpg4"); \
/* Tru64 UNIX V5 has a 16 byte long \
double type and requires __X_FLOAT \
to be defined for <math.h>. */ \
if (LONG_DOUBLE_TYPE_SIZE == 128) \
builtin_define ("__X_FLOAT"); \
#define TARGET_OS_CPP_BUILTINS() \
do { \
builtin_define_std ("unix"); \
builtin_define_std ("SYSTYPE_BSD"); \
builtin_define ("_SYSTYPE_BSD"); \
builtin_define ("__osf__"); \
builtin_define ("_LONGLONG"); \
builtin_define ("__PRAGMA_EXTERN_PREFIX"); \
builtin_assert ("system=unix"); \
builtin_assert ("system=xpg4"); \
/* Tru64 UNIX V5 has a 16 byte long \
double type and requires __X_FLOAT \
to be defined for <math.h>. */ \
if (LONG_DOUBLE_TYPE_SIZE == 128) \
builtin_define ("__X_FLOAT"); \
} while (0)
/* Accept DEC C flags for multithreaded programs. We use _PTHREAD_USE_D4

View File

@ -6588,7 +6588,8 @@ empty string.
This pragma is similar in intent to to the asm labels extension
(@pxref{Asm Labels}) in that the system programmer wants to change
the assembly-level ABI without changing the source-level API. The
preprocessor defines @code{__EXTERN_PREFIX} if the pragma is available.
preprocessor defines @code{__PRAGMA_EXTERN_PREFIX} if the pragma is
available.
@end table
@node Unnamed Fields

View File

@ -709,6 +709,43 @@ static const char* apzAlpha___AssertPatch[] = {
"__assert(const char *, const char *, int)",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description of Alpha___Extern_Prefix fix
*/
tSCC zAlpha___Extern_PrefixName[] =
"alpha___extern_prefix";
/*
* File name selection pattern
*/
tSCC zAlpha___Extern_PrefixList[] =
"|sys/stat.h|";
/*
* Machine/OS name selection pattern
*/
tSCC* apzAlpha___Extern_PrefixMachs[] = {
"alpha*-dec-osf5*",
(const char*)NULL };
/*
* content selection pattern - do fix if pattern found
*/
tSCC zAlpha___Extern_PrefixSelect0[] =
"#[ \t]*if[ \t]*defined\\(__DECC\\)";
#define ALPHA___EXTERN_PREFIX_TEST_CT 1
static tTestDesc aAlpha___Extern_PrefixTests[] = {
{ TT_EGREP, zAlpha___Extern_PrefixSelect0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for Alpha___Extern_Prefix
*/
static const char* apzAlpha___Extern_PrefixPatch[] = {
"format",
"%0 || defined(__PRAGMA_EXTERN_PREFIX)",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description of Alpha_Assert fix
@ -5788,6 +5825,7 @@ typedef enum {
AIX_SYSWAIT_FIXIDX,
AIX_VOLATILE_FIXIDX,
ALPHA___ASSERT_FIXIDX,
ALPHA___EXTERN_PREFIX_FIXIDX,
ALPHA_ASSERT_FIXIDX,
ALPHA_GETOPT_FIXIDX,
ALPHA_PARENS_FIXIDX,
@ -5993,6 +6031,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
ALPHA___ASSERT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aAlpha___AssertTests, apzAlpha___AssertPatch, 0 },
{ zAlpha___Extern_PrefixName, zAlpha___Extern_PrefixList,
apzAlpha___Extern_PrefixMachs,
ALPHA___EXTERN_PREFIX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aAlpha___Extern_PrefixTests, apzAlpha___Extern_PrefixPatch, 0 },
{ zAlpha_AssertName, zAlpha_AssertList,
apzAlpha_AssertMachs,
ALPHA_ASSERT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,

View File

@ -522,6 +522,22 @@ fix = {
};
/*
* Obey __PRAGMA_EXTERN_PREFIX for Tru64 UNIX V5 <sys/stat.h>.
*/
fix = {
hackname = alpha___extern_prefix;
files = sys/stat.h;
select = "#[ \t]*if[ \t]*defined\\(__DECC\\)";
mach = "alpha*-dec-osf5*";
c_fix = format;
c_fix_arg = "%0 || defined(__PRAGMA_EXTERN_PREFIX)";
test_text = "# if defined(__DECC)";
};
/*
* Fix assert macro in assert.h on Alpha OSF/1.
* The superfluous int cast breaks C++.

View File

@ -1,3 +1,8 @@
2003-02-24 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* g++.dg/other/pragma-ep-1.C: Test for __PRAGMA_EXTERN_PREFIX.
* gcc.dg/pragma-ep-1.c: Likewise.
2003-02-24 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/9602

View File

@ -5,7 +5,7 @@
/* { dg-final { scan-assembler "four" } } */
/* { dg-final { scan-assembler-not "_four" } } */
#ifndef __EXTERN_PREFIX
#ifndef __PRAGMA_EXTERN_PREFIX
#error
#endif

View File

@ -5,7 +5,7 @@
/* { dg-final { scan-assembler "four" } } */
/* { dg-final { scan-assembler-not "_four" } } */
#ifndef __EXTERN_PREFIX
#ifndef __PRAGMA_EXTERN_PREFIX
#error
#endif