re PR c++/28139 (alias information for EH is wrong)
cp: PR c++/28139 * except.c (expand_start_catch_block): Use correct types for bitwise copy. testsuite: PR c++/28139 * g++.dg/eh/alias1.C: New test. From-SVN: r116561
This commit is contained in:
parent
a3b6119721
commit
2de9107ad5
|
@ -1,3 +1,9 @@
|
|||
2006-08-29 J"orn Rennecke <joern.rennecke@st.com>
|
||||
|
||||
PR c++/28139
|
||||
* except.c (expand_start_catch_block): Use correct types for bitwise
|
||||
copy.
|
||||
|
||||
2006-08-28 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/26670
|
||||
|
|
|
@ -458,7 +458,14 @@ expand_start_catch_block (tree decl)
|
|||
else
|
||||
{
|
||||
tree init = do_begin_catch ();
|
||||
exp = create_temporary_var (ptr_type_node);
|
||||
tree init_type = type;
|
||||
|
||||
/* Pointers are passed by values, everything else by reference. */
|
||||
if (!TYPE_PTR_P (type))
|
||||
init_type = build_pointer_type (type);
|
||||
if (init_type != TREE_TYPE (init))
|
||||
init = build1 (NOP_EXPR, init_type, init);
|
||||
exp = create_temporary_var (init_type);
|
||||
DECL_REGISTER (exp) = 1;
|
||||
cp_finish_decl (exp, init, /*init_const_expr=*/false,
|
||||
NULL_TREE, LOOKUP_ONLYCONVERTING);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-08-29 J"orn Rennecke <joern.rennecke@st.com>
|
||||
|
||||
PR c++/28139
|
||||
* g++.dg/eh/alias1.C: New test.
|
||||
|
||||
2006-08-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
PR c++/28860
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
// { dg-do run }
|
||||
// { dg-options "-O3" }
|
||||
/* PR c++/28139: disjoint alias sets for the store from
|
||||
expand_start_catch_block than for loading P result in P being loaded
|
||||
before it is initialized for sh-elf. */
|
||||
|
||||
extern "C" {
|
||||
void exit (int) __attribute__ ((noreturn));
|
||||
}
|
||||
|
||||
int i_glob = 42;
|
||||
int *p0 = &i_glob;
|
||||
typedef int **ipp;
|
||||
|
||||
void
|
||||
g (int i)
|
||||
{
|
||||
if (!i_glob)
|
||||
exit ((int)(long long) &i);
|
||||
}
|
||||
|
||||
static void
|
||||
h ()
|
||||
{
|
||||
throw &p0;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
g (42);
|
||||
try
|
||||
{
|
||||
h ();
|
||||
}
|
||||
catch (const ipp &p)
|
||||
{
|
||||
if (**p != 42)
|
||||
exit (1);
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue