This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: gcc-3.3 fixincludes patch. (Was: [Autogen-bugs] autogen-5.5.5)
- From: Bruce Korb <bkorb at veritas dot com>
- To: Peter Breitenlohner <peb at mppmu dot mpg dot de>
- Cc: GCC-patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 12 Jun 2003 08:43:23 -0700
- Subject: Re: gcc-3.3 fixincludes patch. (Was: [Autogen-bugs] autogen-5.5.5)
- References: <Pine.LNX.4.55.0306121507290.5993@pcl321.mppmu.mpg.de> <3EE883E7.D3878DDE@veritas.com> <Pine.LNX.4.55.0306121617330.5993@pcl321.mppmu.mpg.de>
- Reply-to: bkorb at veritas dot com
Peter Breitenlohner wrote:
> .... I wanted to apply some modifications to gcc-3.3's fixinclude in
> order to avoid some annoying fixes of files that are in fact already fixed.
>
> The most prominent example is the replacement of
> #ifndef __cplusplus
> typedef whatever wchar_t;
> #endif
> by
> #ifndef __cplusplus
> #ifndef __cplusplus
> typedef whatever wchar_t;
> #endif
> #endif
>
> I was about to submit these changes as a gcc-patch, but am not quite sure
> under what component category.
>
> Anyway, since you are the maintainer of fixincludes, you should as well get
> a copy, so I have attached the patch.
>
> Please tell me if I should still submit it to gcc-bugzilla.
It won't help much because I don't get notified about gcc-bugzilla stuff.
At any rate, to your patch:
> I allways found it annoying that the avoid_wchar_t_type test of
> fixincludes fixes files that are already `fixed', i.e., where
> the wchar_t typedef is already protected by `#ifndef __cplusplus'.
> I think that should be considered as a misfeature (aka. bug).
One tries to reduce useless fixes.
> I know the new version of this test isn't entirely perfect, but I
> think it safe to assume that either none or all wchar_t typedefs in
> a header file are protected.
I'd go further and say that if a header is C++ aware, then the wchar_t's
should be protected. Does anyone know of a platform that has a header
that claims to be C++ aware and yet has an unprotected typedef of wchar_t?
> Same for math_huge_val_ifndef and stdio_va_list, these should really
> be safe.
Re: HUGE_VAL: ``bypass = "ifndef HUGE_VAL";'' should suffice.
You didn't explain the third diff: DUMMY_VA_LIST
I guess you have a situation where you wound up with a double dummy list?
diff -ur -N gcc-3.3.orig/gcc/fixinc/inclhack.def gcc-3.3/gcc/fixinc/inclhack.def
--- gcc-3.3.orig/gcc/fixinc/inclhack.def 2003-05-07 04:10:48.000000000 +0200
+++ gcc-3.3/gcc/fixinc/inclhack.def 2003-06-12 14:40:21.000000000 +0200
@@ -769,11 +769,15 @@
hackname = avoid_wchar_t_type;
select = "^[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;";
+ bypass = "^#ifndef __cplusplus\n[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
test_text = "typedef unsigned short\twchar_t \t; /* wchar_t\n type */";
+ test_text = "#ifndef __cplusplus\n"
+ "typedef unsigned short\twchar_t \t; /* wchar_t\n type */\n"
+ "#endif";
};
@@ -1930,13 +1934,17 @@
hackname = math_huge_val_ifndef;
files = math.h;
files = math/math.h;
- select = "define[ \t]+HUGE_VAL";
+ select = "^[ \t]*#[ \t]*define[ \t]+HUGE_VAL[ \t].*";
+ bypass = "^#ifndef HUGE_VAL\n"
+ "[ \t]*#[ \t]*define[ \t]+HUGE_VAL[ \t].*";
c_fix = format;
c_fix_arg = "#ifndef HUGE_VAL\n%0\n#endif";
- c_fix_arg = "^[ \t]*#[ \t]*define[ \t]+HUGE_VAL[ \t].*";
test_text = "# define\tHUGE_VAL 3.4e+40";
+ test_text = "#ifndef HUGE_VAL\n"
+ "# define\tHUGE_VAL 3.4e+40\n"
+ "#endif";
};
@@ -2420,6 +2428,7 @@
"@typedef \\1 __not_va_list__;@\n"
"s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
- "s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
- "s@_NEED___VA_LIST@_NEED___Va_LIST@\n"
+ "s@\\(GNUC|DUMMY|_NEED__\\)_VA_LIST@\\1_Va_LIST@\n"
"s@VA_LIST@DUMMY_VA_LIST@\n"
"s@_Va_LIST@_VA_LIST@";