Jason Merrill <ja...@redhat.com> writes: > The issue in this bug was that due to changes in the libstdc++ headers, the > built-in abs declaration was getting hidden by a using-declaration, so that > then when the built-in got an explicit declaration, the original > declaration wasn't there anymore and so the new declaration didn't get > marked as built-in. > > Fixed by overloading an anticipated built-in rather than clobbering it when > we see a using-declaration of the same name. > > Tested x86_64-pc-linux-gnu, applying to trunk.
This patch broke Solaris bootstrap (seen on i386-pc-solaris2.12): /var/gcc/reghunt/trunk/gcc/c-family/c-lex.c: In function 'c_fileinfo* get_fileinfo(const char*)': /var/gcc/reghunt/trunk/gcc/c-family/c-lex.c:102:62: error: overloaded function with no contextual type information file_info_tree = splay_tree_new ((splay_tree_compare_fn) strcmp, ^~~~~~ /var/gcc/reghunt/trunk/gcc/c-family/c-lex.c:104:39: error: overloaded function with no contextual type information (splay_tree_delete_value_fn) free); ^~~~ make[3]: *** [c-family/c-lex.o] Error 1 Comparing c-lex.ii before and after the patch, I see that they differ like this: -# 508 "/var/gcc/reghunt/trunk/gcc/system.h" +# 452 "/var/gcc/reghunt/trunk/gcc/system.h" +extern void free (void *); +# 496 "/var/gcc/reghunt/trunk/gcc/system.h" +extern void *malloc (size_t); + + + +extern void *calloc (size_t, size_t); + + + +extern void *realloc (void *, size_t); + + + } and indeed auto-host.h changed: --- /var/gcc/reghunt/of-no-cti/28675/gcc/auto-host.h 2016-02-09 19:53:23.6030 78417 +0100 +++ auto-host.h 2016-02-09 20:28:39.946901958 +0100 @@ -743 +743 @@ -#define HAVE_DECL_CALLOC 1 +#define HAVE_DECL_CALLOC 0 @@ -846 +846 @@ -#define HAVE_DECL_FREE 1 +#define HAVE_DECL_FREE 0 @@ -937 +937 @@ -#define HAVE_DECL_MALLOC 1 +#define HAVE_DECL_MALLOC 0 @@ -958 +958 @@ -#define HAVE_DECL_REALLOC 1 +#define HAVE_DECL_REALLOC 0 The calloc configure test now fails like this: conftest.cpp: In function 'int main()': conftest.cpp:150:28: error: overloaded function with no contextual type information char *(*pfn) = (char *(*)) calloc ; ^~~~~~ The test boils down to typedef unsigned int size_t; namespace std { extern void *calloc(size_t, size_t); } using std::calloc; int main () { char *(*pfn) = (char *(*)) calloc ; return 0; } Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University