http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48402

Cheng Sheng <jeru.sheng at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jeru.sheng at gmail dot com

--- Comment #1 from Cheng Sheng <jeru.sheng at gmail dot com> 2011-08-03 
09:43:08 UTC ---
I encountered this problem as well in gcc-4.6.1, on Mac OS X 10.7. After some
checking, I found that the source of this error is that "sed" in Linux is
slightly different from "sed" in the POSIX spec (see
http://pubs.opengroup.org/onlinepubs/009695399/utilities/sed.html).
In Linux, the c-command of "sed" can be followed by the text directly, while in
the spec, the c-command should be followed immediately by a backslash, then a
newline, then the text. Therefore, one hack instruction in
gcc-4.6.0/fixinclude/inclhack.def doesn't work:

*****************************************
***** Part of "inclhack.def" Begins *****
*****************************************
/*
 * Solaris 10+ <complex.h> is wrapped in #ifndef __cplusplus.  Wrap in
 * extern "C" instead so libstdc++ can use it.
 */
fix = {
    hackname  = solaris_complex_cxx;
    mach      = "*-*-solaris2.*";
    files     = complex.h;
    sed       = "/#if[ \t]*!defined(__cplusplus)/c"
                "#ifdef\t__cplusplus\\\nextern \"C\" {\\\n#endif";
    sed       = "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c"
                "#ifdef\t__cplusplus\\\n}\\\n#endif";
    test_text = "#if !defined(__cplusplus)\n"
                "#endif /* !defined(__cplusplus) */";
};
***************************************
***** Part of "inclhack.def" Ends *****
***************************************

A fix would be to replace the "/c" commands of the two "sed"s to "/c\\\n",
i.e.:

--- inclhack.def.bak    2011-08-03 17:40:44.000000000 +0800
+++ inclhack.def    2011-08-03 17:40:52.000000000 +0800
@@ -3315,9 +3315,9 @@
     hackname  = solaris_complex_cxx;
     mach      = "*-*-solaris2.*";
     files     = complex.h;
-    sed          = "/#if[ \t]*!defined(__cplusplus)/c"
+    sed          = "/#if[ \t]*!defined(__cplusplus)/c\\\n"
             "#ifdef\t__cplusplus\\\nextern \"C\" {\\\n#endif";
-    sed          = "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c"
+    sed          = "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c\\\n"
         "#ifdef\t__cplusplus\\\n}\\\n#endif";
     test_text = "#if !defined(__cplusplus)\n"
         "#endif    /* !defined(__cplusplus) */";

Reply via email to