Commit a08a479f by Frank Ch. Eigler Committed by Frank Ch. Eigler

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
parent b7d1c15e
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.
......
...@@ -497,40 +497,25 @@ mf_build_check_statement_for (tree base, tree limit, ...@@ -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) ...@@ -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. */
......
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.
......
...@@ -5,7 +5,7 @@ dg-init ...@@ -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"
......
#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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment