re PR target/20366 (AIX g++ -D_LARGE_FILES fails to compile #include <iostream>)
fixincludes/ 2008-03-07 Peter O'Gorman <pogma@thewrittenword.com> PR c++/20366 * inclhack.def (AAB_aix_stdio): Hack stdio.h for -D_LARGE_FILES. * fixincl.x: Regenerate. * tests/base/stdio.h: Add test. gcc/testsuite/ 2008-03-07 Peter O'Gorman <pogma@thewrittenword.com> PR c++/20366 * g++.dg/other/pr20366.C: New test. From-SVN: r133001
This commit is contained in:
parent
cb6f415f34
commit
83644cd500
@ -1,3 +1,10 @@
|
|||||||
|
2008-03-07 Peter O'Gorman <pogma@thewrittenword.com>
|
||||||
|
|
||||||
|
PR c++/20366
|
||||||
|
* inclhack.def (AAB_aix_stdio): Hack stdio.h for -D_LARGE_FILES.
|
||||||
|
* fixincl.x: Regenerate.
|
||||||
|
* tests/base/stdio.h: Add test.
|
||||||
|
|
||||||
2008-02-25 Ben Elliston <bje@au.ibm.com>
|
2008-02-25 Ben Elliston <bje@au.ibm.com>
|
||||||
|
|
||||||
PR other/32948
|
PR other/32948
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
*
|
*
|
||||||
* DO NOT EDIT THIS FILE (fixincl.x)
|
* DO NOT EDIT THIS FILE (fixincl.x)
|
||||||
*
|
*
|
||||||
* It has been AutoGen-ed Wednesday February 20, 2008 at 05:10:00 AM CET
|
* It has been AutoGen-ed Friday March 7, 2008 at 07:37:21 AM CET
|
||||||
* From the definitions inclhack.def
|
* From the definitions inclhack.def
|
||||||
* and the template file fixincl
|
* and the template file fixincl
|
||||||
*/
|
*/
|
||||||
/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Feb 20 05:10:00 CET 2008
|
/* DO NOT SVN-MERGE THIS FILE, EITHER Fr 7. Mär 07:37:22 CET 2008
|
||||||
*
|
*
|
||||||
* You must regenerate it. Use the ./genfixes script.
|
* You must regenerate it. Use the ./genfixes script.
|
||||||
*
|
*
|
||||||
@ -15,32 +15,85 @@
|
|||||||
* certain ANSI-incompatible system header files which are fixed to work
|
* certain ANSI-incompatible system header files which are fixed to work
|
||||||
* correctly with ANSI C and placed in a directory that GNU C will search.
|
* correctly with ANSI C and placed in a directory that GNU C will search.
|
||||||
*
|
*
|
||||||
* This file contains 212 fixup descriptions.
|
* This file contains 213 fixup descriptions.
|
||||||
*
|
*
|
||||||
* See README for more information.
|
* See README for more information.
|
||||||
*
|
*
|
||||||
* inclhack copyright (c) 1998, 1999, 2000, 2001
|
* inclhack copyright (c) 1998, 1999, 2000, 2001
|
||||||
* The Free Software Foundation, Inc.
|
* The Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* inclhack is free software.
|
* inclhack is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* You may redistribute it and/or modify it under the terms of the
|
* inclhack is distributed in the hope that it will be useful, but
|
||||||
* GNU General Public License, as published by the Free Software
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* inclhack is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
* See the GNU General Public License for more details.
|
* See the GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License along
|
||||||
* along with inclhack. If not, write to:
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* The Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Description of Aab_Aix_Stdio fix
|
||||||
|
*/
|
||||||
|
tSCC zAab_Aix_StdioName[] =
|
||||||
|
"AAB_aix_stdio";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File name selection pattern
|
||||||
|
*/
|
||||||
|
tSCC zAab_Aix_StdioList[] =
|
||||||
|
"stdio.h\0";
|
||||||
|
/*
|
||||||
|
* Machine/OS name selection pattern
|
||||||
|
*/
|
||||||
|
tSCC* apzAab_Aix_StdioMachs[] = {
|
||||||
|
"*-*-aix*",
|
||||||
|
(const char*)NULL };
|
||||||
|
|
||||||
|
/*
|
||||||
|
* content selection pattern - do fix if pattern found
|
||||||
|
*/
|
||||||
|
tSCC zAab_Aix_StdioSelect0[] =
|
||||||
|
"define fopen fopen64";
|
||||||
|
|
||||||
|
#define AAB_AIX_STDIO_TEST_CT 1
|
||||||
|
static tTestDesc aAab_Aix_StdioTests[] = {
|
||||||
|
{ TT_EGREP, zAab_Aix_StdioSelect0, (regex_t*)NULL }, };
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fix Command Arguments for Aab_Aix_Stdio
|
||||||
|
*/
|
||||||
|
static const char* apzAab_Aix_StdioPatch[] = {
|
||||||
|
"wrap",
|
||||||
|
"",
|
||||||
|
"\n\
|
||||||
|
#if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus\n\
|
||||||
|
#define __need__aix_stdio_h_fix\n\
|
||||||
|
#ifdef __need__aix_stdio_h_fix\n\
|
||||||
|
#undef fseeko\n\
|
||||||
|
#undef ftello\n\
|
||||||
|
#undef fgetpos\n\
|
||||||
|
#undef fsetpos\n\
|
||||||
|
#undef fopen\n\
|
||||||
|
#undef freopen\n\
|
||||||
|
/* Alias the symbols using asm */\n\
|
||||||
|
extern \"C\" {\n\
|
||||||
|
extern int fgetpos(FILE *, fpos64_t *) __asm__(\"fgetpos64\");\n\
|
||||||
|
extern FILE *fopen(const char *, const char *) __asm__(\"fopen64\");\n\
|
||||||
|
extern FILE *freopen(const char *, const char *, FILE *) __asm__(\"freopen64\");\n\
|
||||||
|
extern int fseeko(FILE *, off64_t, int) __asm__(\"fseeko64\");\n\
|
||||||
|
extern int fsetpos(FILE *, const fpos64_t *) __asm__(\"fsetpos64\");\n\
|
||||||
|
extern off64_t ftello(FILE *) __asm__(\"ftello64\");\n\
|
||||||
|
}\n\
|
||||||
|
#endif\n\
|
||||||
|
#endif\n",
|
||||||
|
(char*)NULL };
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Description of Aab_Darwin7_9_Long_Double_Funcs fix
|
* Description of Aab_Darwin7_9_Long_Double_Funcs fix
|
||||||
@ -8611,14 +8664,15 @@ static const char* apzX11_SprintfPatch[] = {
|
|||||||
*
|
*
|
||||||
* List of all fixes
|
* List of all fixes
|
||||||
*/
|
*/
|
||||||
#define REGEX_COUNT 255
|
#define REGEX_COUNT 256
|
||||||
#define MACH_LIST_SIZE_LIMIT 261
|
#define MACH_LIST_SIZE_LIMIT 261
|
||||||
#define FIX_COUNT 212
|
#define FIX_COUNT 213
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enumerate the fixes
|
* Enumerate the fixes
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
AAB_AIX_STDIO_FIXIDX,
|
||||||
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_FIXIDX,
|
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_FIXIDX,
|
||||||
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_2_FIXIDX,
|
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_2_FIXIDX,
|
||||||
AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX,
|
AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX,
|
||||||
@ -8834,6 +8888,11 @@ typedef enum {
|
|||||||
} t_fixinc_idx;
|
} t_fixinc_idx;
|
||||||
|
|
||||||
tFixDesc fixDescList[ FIX_COUNT ] = {
|
tFixDesc fixDescList[ FIX_COUNT ] = {
|
||||||
|
{ zAab_Aix_StdioName, zAab_Aix_StdioList,
|
||||||
|
apzAab_Aix_StdioMachs,
|
||||||
|
AAB_AIX_STDIO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
|
||||||
|
aAab_Aix_StdioTests, apzAab_Aix_StdioPatch, 0 },
|
||||||
|
|
||||||
{ zAab_Darwin7_9_Long_Double_FuncsName, zAab_Darwin7_9_Long_Double_FuncsList,
|
{ zAab_Darwin7_9_Long_Double_FuncsName, zAab_Darwin7_9_Long_Double_FuncsList,
|
||||||
apzAab_Darwin7_9_Long_Double_FuncsMachs,
|
apzAab_Darwin7_9_Long_Double_FuncsMachs,
|
||||||
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
|
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
|
||||||
|
@ -20,6 +20,47 @@ autogen definitions fixincl;
|
|||||||
FIXINC_DEBUG = yes;
|
FIXINC_DEBUG = yes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* On AIX when _LARGE_FILES is defined stdio.h defines fopen to
|
||||||
|
* fopen64 etc. and this causes problems when building with g++
|
||||||
|
* because cstdio udefs everything from stdio.h, leaving us with
|
||||||
|
* ::fopen has not been declared errors. This fixes stdio.h to
|
||||||
|
* undef those defines and use __asm__ to alias the symbols if
|
||||||
|
* building with g++ and -D_LARGE_FILES
|
||||||
|
*/
|
||||||
|
fix = {
|
||||||
|
hackname = AAB_aix_stdio;
|
||||||
|
files = stdio.h;
|
||||||
|
select = "define fopen fopen64";
|
||||||
|
mach = "*-*-aix*";
|
||||||
|
|
||||||
|
c_fix = wrap;
|
||||||
|
|
||||||
|
c_fix_arg = "";
|
||||||
|
|
||||||
|
c_fix_arg = "\n"
|
||||||
|
"#if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus\n"
|
||||||
|
"#define __need__aix_stdio_h_fix\n"
|
||||||
|
"#ifdef __need__aix_stdio_h_fix\n"
|
||||||
|
"#undef fseeko\n"
|
||||||
|
"#undef ftello\n"
|
||||||
|
"#undef fgetpos\n"
|
||||||
|
"#undef fsetpos\n"
|
||||||
|
"#undef fopen\n"
|
||||||
|
"#undef freopen\n"
|
||||||
|
"/* Alias the symbols using asm */\n"
|
||||||
|
"extern \"C\" {\n"
|
||||||
|
"extern int fgetpos(FILE *, fpos64_t *) __asm__(\"fgetpos64\");\n"
|
||||||
|
"extern FILE *fopen(const char *, const char *) __asm__(\"fopen64\");\n"
|
||||||
|
"extern FILE *freopen(const char *, const char *, FILE *) __asm__(\"freopen64\");\n"
|
||||||
|
"extern int fseeko(FILE *, off64_t, int) __asm__(\"fseeko64\");\n"
|
||||||
|
"extern int fsetpos(FILE *, const fpos64_t *) __asm__(\"fsetpos64\");\n"
|
||||||
|
"extern off64_t ftello(FILE *) __asm__(\"ftello64\");\n"
|
||||||
|
"}\n"
|
||||||
|
"#endif\n"
|
||||||
|
"#endif\n";
|
||||||
|
test_text = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On Mac OS 10.3.9, the 'long double' functions are available in
|
* On Mac OS 10.3.9, the 'long double' functions are available in
|
||||||
|
@ -14,6 +14,11 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if defined( AAB_AIX_STDIO_CHECK )
|
||||||
|
|
||||||
|
#endif /* AAB_AIX_STDIO_CHECK */
|
||||||
|
|
||||||
|
|
||||||
#if defined( ALPHA_GETOPT_CHECK )
|
#if defined( ALPHA_GETOPT_CHECK )
|
||||||
extern int getopt(int, char *const[], const char *);
|
extern int getopt(int, char *const[], const char *);
|
||||||
#endif /* ALPHA_GETOPT_CHECK */
|
#endif /* ALPHA_GETOPT_CHECK */
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2008-03-07 Peter O'Gorman <pogma@thewrittenword.com>
|
||||||
|
|
||||||
|
PR c++/20366
|
||||||
|
* g++.dg/other/pr20366.C: New test.
|
||||||
|
|
||||||
2008-03-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
2008-03-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||||
|
|
||||||
PR tree-opt/35402
|
PR tree-opt/35402
|
||||||
|
80
gcc/testsuite/g++.dg/other/pr20366.C
Normal file
80
gcc/testsuite/g++.dg/other/pr20366.C
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// Test fix for PR20366
|
||||||
|
//
|
||||||
|
// { dg-do compile { target *-*-aix* } }
|
||||||
|
// { dg-options "-D_LARGE_FILES" }
|
||||||
|
//
|
||||||
|
// cstdio includes stdio.h and undefs most of the functions declared
|
||||||
|
// therein, unfortunately this means that #define fopen fopen64 goes
|
||||||
|
// away. This tests the fix, and ensures that with -D_LARGE_FILES
|
||||||
|
// fopen et. al. are indeed aliased to the large file equivalents.
|
||||||
|
//
|
||||||
|
// There are many other #define foo foo64 in the AIX headers, but
|
||||||
|
// these all work out fine as they are not undefined in libstdc++.
|
||||||
|
// This list is probably incomplete:
|
||||||
|
//
|
||||||
|
// Symbol Return type Large file declaration.
|
||||||
|
//
|
||||||
|
// aio.h (different for different AIX versions)
|
||||||
|
// =====
|
||||||
|
// aio_read int aio_read64(int, struct aiocb64 *);
|
||||||
|
// aio_write int aio_write64(int, struct aiocb64 *);
|
||||||
|
// lio_listio int lio_listio64(int, struct liocb64 *[], int, void *);
|
||||||
|
// aio_cancel int aio_cancel64(int, struct aiocb64 *);
|
||||||
|
// aio_suspend int aio_suspend64(int, struct aiocb64 *[]);
|
||||||
|
//
|
||||||
|
// stdio.h
|
||||||
|
// =======
|
||||||
|
// fgetpos int fgetpos64(FILE *, fpos64_t *);
|
||||||
|
// fopen FILE *fopen64(const char *, const char *);
|
||||||
|
// freopen FILE *freopen64(const char *, const char *, FILE *);
|
||||||
|
// fseeko int fseeko64(FILE *, off64_t, int);
|
||||||
|
// fsetpos int fsetpos64(FILE *, const fpos64_t *);
|
||||||
|
// ftello off64_t ftello64(FILE *);
|
||||||
|
//
|
||||||
|
// unistd.h
|
||||||
|
// ========
|
||||||
|
// fclear off64_t fclear64(int, off64_t);
|
||||||
|
// fsync_range int fsync_range64(int, int, off64_t, off64_t);
|
||||||
|
// ftruncate int ftruncate64(int, off64_t);
|
||||||
|
// truncate int truncate64(const char *, off64_t);
|
||||||
|
// lseek off64_t lseek64(int, off64_t, int);
|
||||||
|
// pread ssize_t pread64(int, void *, size_t, off64_t);
|
||||||
|
// pwrite ssize_t pwrite64(int, const void *, size_t, off64_t);
|
||||||
|
//
|
||||||
|
// fcntl.h
|
||||||
|
// =======
|
||||||
|
// open int open64(const char *, int, ...);
|
||||||
|
// creat int creat64(const char *, mode_t);
|
||||||
|
//
|
||||||
|
// sys/stat.h
|
||||||
|
// ==========
|
||||||
|
// stat int stat64(const char *, struct stat64 *);
|
||||||
|
// fstat int fstat64(int, struct stat64 *);
|
||||||
|
// lstat int lstat64(const char *, struct stat64 *);
|
||||||
|
//
|
||||||
|
// stdlib.h
|
||||||
|
// ========
|
||||||
|
// mkstemp int mkstemp64(char *);
|
||||||
|
//
|
||||||
|
// ftw.h
|
||||||
|
// =====
|
||||||
|
// ftw int ftw64(const char *, int (*)(const char *,const struct stat64 *, int), int);
|
||||||
|
// nftw int nftw64(const char *, int (*)(const char *, const struct stat64 *, int, struct FTW*), int, int);
|
||||||
|
//
|
||||||
|
// It seems unlikely that any of these will be used (and #undef'ed) by
|
||||||
|
// libstdc++ in the future, if they are then this test and its
|
||||||
|
// associated patch to fixincludes will have to be revisited.
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
int fgetpos(FILE *, fpos64_t *);
|
||||||
|
FILE *fopen(const char *, const char *);
|
||||||
|
FILE *freopen(const char *, const char *, FILE *);
|
||||||
|
int fseeko(FILE *, off64_t, int);
|
||||||
|
int fsetpos(FILE *, const fpos64_t *);
|
||||||
|
off64_t ftello(FILE *);
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user