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>
|
||||
|
||||
PR other/32948
|
||||
|
@ -2,11 +2,11 @@
|
||||
*
|
||||
* 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
|
||||
* 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.
|
||||
*
|
||||
@ -15,32 +15,85 @@
|
||||
* 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.
|
||||
*
|
||||
* This file contains 212 fixup descriptions.
|
||||
* This file contains 213 fixup descriptions.
|
||||
*
|
||||
* See README for more information.
|
||||
*
|
||||
* inclhack copyright (c) 1998, 1999, 2000, 2001
|
||||
* 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
|
||||
* GNU General Public License, as published by the Free Software
|
||||
* 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
|
||||
* 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.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with inclhack. If not, write to:
|
||||
* The Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* 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
|
||||
@ -8611,14 +8664,15 @@ static const char* apzX11_SprintfPatch[] = {
|
||||
*
|
||||
* List of all fixes
|
||||
*/
|
||||
#define REGEX_COUNT 255
|
||||
#define REGEX_COUNT 256
|
||||
#define MACH_LIST_SIZE_LIMIT 261
|
||||
#define FIX_COUNT 212
|
||||
#define FIX_COUNT 213
|
||||
|
||||
/*
|
||||
* Enumerate the fixes
|
||||
*/
|
||||
typedef enum {
|
||||
AAB_AIX_STDIO_FIXIDX,
|
||||
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_FIXIDX,
|
||||
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_2_FIXIDX,
|
||||
AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX,
|
||||
@ -8834,6 +8888,11 @@ typedef enum {
|
||||
} t_fixinc_idx;
|
||||
|
||||
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,
|
||||
apzAab_Darwin7_9_Long_Double_FuncsMachs,
|
||||
AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT,
|
||||
|
@ -20,6 +20,47 @@ autogen definitions fixincl;
|
||||
FIXINC_DEBUG = yes;
|
||||
#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
|
||||
|
@ -14,6 +14,11 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
|
||||
#if defined( AAB_AIX_STDIO_CHECK )
|
||||
|
||||
#endif /* AAB_AIX_STDIO_CHECK */
|
||||
|
||||
|
||||
#if defined( ALPHA_GETOPT_CHECK )
|
||||
extern int getopt(int, char *const[], const char *);
|
||||
#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>
|
||||
|
||||
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