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>
|
2006-08-28 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/26670
|
PR c++/26670
|
||||||
|
@ -458,7 +458,14 @@ expand_start_catch_block (tree decl)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
tree init = do_begin_catch ();
|
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;
|
DECL_REGISTER (exp) = 1;
|
||||||
cp_finish_decl (exp, init, /*init_const_expr=*/false,
|
cp_finish_decl (exp, init, /*init_const_expr=*/false,
|
||||||
NULL_TREE, LOOKUP_ONLYCONVERTING);
|
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>
|
2006-08-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||||
|
|
||||||
PR c++/28860
|
PR c++/28860
|
||||||
|
42
gcc/testsuite/g++.dg/eh/alias1.C
Normal file
42
gcc/testsuite/g++.dg/eh/alias1.C
Normal file
@ -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
Block a user