yann@402: Workaround for buglet in std::vector etc. when compiling yann@402: with gcc-4.0.1 -Wall -O -fno-exceptions yann@402: Fixes: yann@402: yann@402: .../include/c++/4.0.0/bits/vector.tcc: In member function 'void std::vector<_Tp, yann@402: _Alloc>::reserve(size_t) [with _Tp = int, _Alloc = std::allocator]': yann@402: .../include/c++/4.0.0/bits/vector.tcc:78: warning: control may reach end of yann@402: non-void function 'typename _Alloc::pointer std::vector<_Tp, yann@402: _Alloc>::_M_allocate_and_copy(size_t, _ForwardIterator, _ForwardIterator) [with yann@402: _ForwardIterator = int*, _Tp = int, _Alloc = std::allocator]' being inlined yann@402: yann@402: See http://gcc.gnu.org/PR21951 yann@402: yann@402: To: gcc-patches at gcc dot gnu dot org yann@402: Subject: [4.0.x] may reach end warning in system headers yann@402: Message-Id: <20050701183024.E138714C16A9@geoffk5.apple.com> yann@402: Date: Fri, 1 Jul 2005 11:30:24 -0700 (PDT) yann@402: From: gkeating at apple dot com (Geoffrey Keating) yann@402: yann@402: yann@402: One of our users was getting yann@402: yann@402: /usr/include/gcc/darwin/4.0/c++/bits/stl_uninitialized.h:113: warning: yann@402: control may reach end of non-void function '_ForwardIterator yann@402: std::__uninitialized_copy_aux(_InputIterator, _InputIterator, yann@402: _ForwardIterator, __false_type) [with _InputIterator = yann@402: __gnu_cxx::__normal_iterator > >, _ForwardIterator = yann@402: __gnu_cxx::__normal_iterator > >]' being inlined yann@402: yann@402: which shouldn't be happening, he has no way to change a standard C++ yann@402: header. The warning is bogus anyway, but it's fixed in 4.1 through yann@402: the CFG changes, which I don't really want to backport to the 4.0 yann@402: branch, so instead I'll add this patch. Other warnings generated from yann@402: tree-inline.c check for DECL_SYSTEM_HEADER like this. yann@402: yann@402: Bootstrapped & tested on powerpc-darwin8, I'll commit when the branch yann@402: is unfrozen. yann@402: yann@402: -- yann@402: - Geoffrey Keating yann@402: yann@402: ===File ~/patches/gcc-40-4121982.patch====================== yann@402: Index: ChangeLog yann@402: 2005-06-28 Geoffrey Keating yann@402: yann@402: * tree-inline.c (expand_call_inline): Prevent 'may reach end' yann@402: warning in system headers. yann@402: yann@402: Index: tree-inline.c yann@402: =================================================================== yann@402: RCS file: /cvs/gcc/gcc/gcc/tree-inline.c,v yann@402: retrieving revision 1.170.8.4 yann@402: diff -u -p -u -p -r1.170.8.4 tree-inline.c yann@402: --- gcc-4.0.1/gcc/tree-inline.c.old 6 Jun 2005 19:20:32 -0000 1.170.8.4 yann@402: +++ gcc-4.0.1/gcc/tree-inline.c 1 Jul 2005 18:27:26 -0000 yann@402: @@ -1693,7 +1693,8 @@ expand_call_inline (tree *tp, int *walk_ yann@402: && !TREE_NO_WARNING (fn) yann@402: && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (fn))) yann@402: && return_slot_addr == NULL_TREE yann@402: - && block_may_fallthru (copy)) yann@402: + && block_may_fallthru (copy) yann@402: + && !DECL_IN_SYSTEM_HEADER (fn)) yann@402: { yann@402: warning ("control may reach end of non-void function %qD being inlined", yann@402: fn); yann@402: ============================================================ yann@402: