re PR other/19266 ([mudflap] ICE when compiling with -fmudflap -O)

2005-04-12  Frank Ch. Eigler  <fche@redhat.com>

	PR mudflap/19266
	From Richard Henderson <rth@redhat.com>:
	* tree-mudflap.c (mf_build_check_statement_for): Correct block
	splitting logic.

2005-04-12  Frank Ch. Eigler  <fche@redhat.com>

	PR mudflap/19266
	* testsuite/libmudflap.c++/c++frags.exp: Also test -O permutation.
	* testsuite/libmudflap.c++/pass57-frag.cxx: New test.

From-SVN: r98028
This commit is contained in:
Frank Ch. Eigler 2005-04-12 18:09:09 +00:00 committed by Frank Ch. Eigler
parent b7d1c15e4e
commit a08a479fec
5 changed files with 48 additions and 25 deletions

View File

@ -1,3 +1,10 @@
2005-04-12 Frank Ch. Eigler <fche@redhat.com>
PR mudflap/19266
From Richard Henderson <rth@redhat.com>:
* tree-mudflap.c (mf_build_check_statement_for): Correct block
splitting logic.
2005-04-12 Dorit Naishlos <dorit@il.ibm.com> 2005-04-12 Dorit Naishlos <dorit@il.ibm.com>
* tree-cfg.c (tree_verify_flow_info): Use LABEL_EXPR_LABEL. * tree-cfg.c (tree_verify_flow_info): Use LABEL_EXPR_LABEL.

View File

@ -497,40 +497,25 @@ mf_build_check_statement_for (tree base, tree limit,
block_stmt_iterator bsi; block_stmt_iterator bsi;
basic_block cond_bb, then_bb, join_bb; basic_block cond_bb, then_bb, join_bb;
edge e; edge e;
tree cond, t, u, v, l1, l2; tree cond, t, u, v;
tree mf_base; tree mf_base;
tree mf_elem; tree mf_elem;
tree mf_limit; tree mf_limit;
/* We first need to split the current basic block, and start altering /* We first need to split the current basic block, and start altering
the CFG. This allows us to insert the statements we're about to the CFG. This allows us to insert the statements we're about to
construct into the right basic blocks. The label l1 is the label construct into the right basic blocks. */
of the block for the THEN clause of the conditional jump we're
about to construct, and l2 is the ELSE clause, which is just the
continuation of the old statement stream. */
l1 = create_artificial_label ();
l2 = create_artificial_label ();
cond_bb = bb_for_stmt (bsi_stmt (*instr_bsi)); cond_bb = bb_for_stmt (bsi_stmt (*instr_bsi));
bsi = *instr_bsi; bsi = *instr_bsi;
bsi_prev (&bsi); bsi_prev (&bsi);
if (! bsi_end_p (bsi)) if (! bsi_end_p (bsi))
{ e = split_block (cond_bb, bsi_stmt (bsi));
/* We're processing a statement in the middle of the block, so
we need to split the block. This creates a new block and a new
fallthrough edge. */
e = split_block (cond_bb, bsi_stmt (bsi));
cond_bb = e->src;
join_bb = e->dest;
}
else else
{ e = split_block_after_labels (cond_bb);
/* We're processing the first statement in the block, so we need cond_bb = e->src;
to split the incoming edge. This also creates a new block join_bb = e->dest;
and a new fallthrough edge. */
join_bb = cond_bb;
cond_bb = split_edge (find_edge (join_bb->prev_bb, join_bb));
}
/* A recap at this point: join_bb is the basic block at whose head /* A recap at this point: join_bb is the basic block at whose head
is the gimple statement for which this check expression is being is the gimple statement for which this check expression is being
built. cond_bb is the (possibly new, synthetic) basic block the built. cond_bb is the (possibly new, synthetic) basic block the
@ -721,7 +706,7 @@ mf_decl_eligible_p (tree decl)
/* The decl must have its address taken. In the case of /* The decl must have its address taken. In the case of
arrays, this flag is also set if the indexes are not arrays, this flag is also set if the indexes are not
compile-time known valid constants. */ compile-time known valid constants. */
&& TREE_ADDRESSABLE (decl) && TREE_ADDRESSABLE (decl) /* XXX: not sufficient: return-by-value structs! */
/* The type of the variable must be complete. */ /* The type of the variable must be complete. */
&& COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (decl)) && COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (decl))
/* The decl hasn't been decomposed somehow. */ /* The decl hasn't been decomposed somehow. */

View File

@ -1,3 +1,9 @@
2005-04-12 Frank Ch. Eigler <fche@redhat.com>
PR mudflap/19266
* testsuite/libmudflap.c++/c++frags.exp: Also test -O permutation.
* testsuite/libmudflap.c++/pass57-frag.cxx: New test.
2005-04-04 Alan Modra <amodra@bigpond.net.au> 2005-04-04 Alan Modra <amodra@bigpond.net.au>
* mf-runtime.c (__mfu_unregister): Warning fix for char unsigned. * mf-runtime.c (__mfu_unregister): Warning fix for char unsigned.

View File

@ -5,7 +5,7 @@ dg-init
global srcdir global srcdir
foreach flags [list {} {-static} {-O2} {-O3}] { foreach flags [list {} {-static} {-O} {-O2} {-O3}] {
foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.c++/*frag.cxx]] { foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.c++/*frag.cxx]] {
set bsrc [file tail $srcfile] set bsrc [file tail $srcfile]
setenv MUDFLAP_OPTIONS "-viol-segv" setenv MUDFLAP_OPTIONS "-viol-segv"

View File

@ -0,0 +1,25 @@
#include <vector>
#include <string>
class fitscolumn
{
private:
std::string name_, unit_;
int i, t;
public:
fitscolumn (const std::string &nm, const std::string &un,int i1,int t1)
: name_(nm), unit_(un), i(i1), t(t1){}
};
void init_bintab(std::vector<fitscolumn> & columns_)
{
char ttype[81], tunit[81], tform[81];
long repc;
int typecode;
columns_.push_back (fitscolumn (ttype,tunit,1,typecode));
}
int main ()
{
return 0;
}