mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
b7d1c15e4e
commit
a08a479fec
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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. */
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue