mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 23:51:18 +08:00
re PR middle-end/39732 (-fprofile-generate -O1: ICE: verify_stmts failed, ADDRESSABLE bit not set on pointers passed to std::copy)
2009-04-11 Richard Guenther <rguenther@suse.de> PR middle-end/39732 * tree-inline.c (declare_return_variable): Mark DECL_BY_REFERENCE return variables as TREE_ADDRESSABLE. * g++.dg/torture/pr39732.C: New testcase. From-SVN: r145954
This commit is contained in:
parent
568eecadba
commit
32848948c2
gcc
@ -1,3 +1,9 @@
|
||||
2009-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/39732
|
||||
* tree-inline.c (declare_return_variable): Mark DECL_BY_REFERENCE
|
||||
return variables as TREE_ADDRESSABLE.
|
||||
|
||||
2009-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/39713
|
||||
|
@ -1,3 +1,8 @@
|
||||
2009-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/39732
|
||||
* g++.dg/torture/pr39732.C: New testcase.
|
||||
|
||||
2009-04-11 Daniel Franke <franke.daniel@gmail.com>
|
||||
|
||||
* gfortran.dg/whole_file_5.f90: New.
|
||||
|
29
gcc/testsuite/g++.dg/torture/pr39732.C
Normal file
29
gcc/testsuite/g++.dg/torture/pr39732.C
Normal file
@ -0,0 +1,29 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fprofile-generate" } */
|
||||
|
||||
template<class _CharT> struct char_traits;
|
||||
template<typename _OI>
|
||||
_OI __copy_move_a2(_OI __result);
|
||||
template<typename _OI> inline _OI
|
||||
copy(_OI __result)
|
||||
{
|
||||
return __copy_move_a2 (__result);
|
||||
}
|
||||
template<typename _CharT, typename _Traits>
|
||||
class basic_ostream { };
|
||||
template<typename _Tp, typename _CharT = char, typename _Traits = char_traits<_CharT> >
|
||||
class ostream_iterator {
|
||||
typedef basic_ostream<_CharT, _Traits> ostream_type;
|
||||
ostream_type* _M_stream;
|
||||
const _CharT* _M_string;
|
||||
public:
|
||||
ostream_iterator(ostream_type& __s, const _CharT* __c)
|
||||
: _M_stream(&__s), _M_string(__c) { }
|
||||
ostream_iterator(const ostream_iterator& __obj)
|
||||
: _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
|
||||
};
|
||||
int f(void)
|
||||
{
|
||||
basic_ostream<char, char_traits<char> > os;
|
||||
copy(ostream_iterator<const int>(os, ","));
|
||||
}
|
@ -2386,7 +2386,10 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
|
||||
STRIP_USELESS_TYPE_CONVERSION (use);
|
||||
|
||||
if (DECL_BY_REFERENCE (result))
|
||||
var = build_fold_addr_expr (var);
|
||||
{
|
||||
TREE_ADDRESSABLE (var) = 1;
|
||||
var = build_fold_addr_expr (var);
|
||||
}
|
||||
|
||||
done:
|
||||
/* Register the VAR_DECL as the equivalent for the RESULT_DECL; that
|
||||
|
Loading…
x
Reference in New Issue
Block a user