Commit 012c4da9 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/33289 (__sprintf_chk etc. not DECL_ANTICIPATED)

	PR c++/33289
	* decl.c (builtin_function_1): Set DECL_ANTICIPATED also
	on __*_chk non-__builtin_* decls.

	* g++.dg/eh/builtin4.C: New test.

From-SVN: r128160
parent 62bedd31
...@@ -3,6 +3,10 @@ ...@@ -3,6 +3,10 @@
* decl.c (duplicate_decls): Set TREE_NOTHROW on __builtin_XX * decl.c (duplicate_decls): Set TREE_NOTHROW on __builtin_XX
decl if a prototype for XX is provided with throw(). decl if a prototype for XX is provided with throw().
PR c++/33289
* decl.c (builtin_function_1): Set DECL_ANTICIPATED also
on __*_chk non-__builtin_* decls.
2007-09-05 Paolo Carlini <pcarlini@suse.de> 2007-09-05 Paolo Carlini <pcarlini@suse.de>
PR c++/30302 PR c++/30302
......
...@@ -3528,6 +3528,17 @@ builtin_function_1 (tree decl, tree context) ...@@ -3528,6 +3528,17 @@ builtin_function_1 (tree decl, tree context)
anticipated but not actually declared. */ anticipated but not actually declared. */
if (name[0] != '_' || name[1] != '_') if (name[0] != '_' || name[1] != '_')
DECL_ANTICIPATED (decl) = 1; DECL_ANTICIPATED (decl) = 1;
else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
{
size_t len = strlen (name);
/* Treat __*_chk fortification functions as anticipated as well,
unless they are __builtin_*. */
if (len > strlen ("___chk")
&& memcmp (name + len - strlen ("_chk"),
"_chk", strlen ("_chk") + 1) == 0)
DECL_ANTICIPATED (decl) = 1;
}
return decl; return decl;
} }
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
* g++.dg/eh/builtin2.C: New test. * g++.dg/eh/builtin2.C: New test.
* g++.dg/eh/builtin3.C: New test. * g++.dg/eh/builtin3.C: New test.
PR c++/33289
* g++.dg/eh/builtin4.C: New test.
2007-09-05 Janis Johnson <janis187@us.ibm.com> 2007-09-05 Janis Johnson <janis187@us.ibm.com>
* gcc.target/powerpc/dfp-dd.c: New test. * gcc.target/powerpc/dfp-dd.c: New test.
// PR c++/33289
// { dg-do compile }
typedef __SIZE_TYPE__ size_t;
extern "C" int __sprintf_chk (char *__restrict, int, size_t, const char *, ...) throw ();
extern "C" int __sprintf_chk (char *__restrict, int, size_t, const char *, ...) throw ();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment