[Bug middle-end/11185] New: [tree-ssa] ICE with "Vars Conflict across an abnormal edge"
bangerth@dealii.org
gcc-bugzilla@gcc.gnu.org
Fri Jun 13 13:59:00 GMT 2003
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11185
Summary: [tree-ssa] ICE with "Vars Conflict across an abnormal
edge"
Product: gcc
Version: 3.4
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: bangerth@dealii.org
CC: gcc-bugs@gcc.gnu.org
GCC host triplet: x86 linux
GCC target triplet: x86 linux
OK, here's my newest tree-ssa failure:
---------------------------------------
struct my_vector_base {
~my_vector_base() {}
};
struct Iterator {
int *node;
Iterator& operator++() {
if (node != 0)
{}
else
{
int * y = node;
while (node == y) {
node = y;
}
if (node != y)
node = y;
}
return *this;
}
};
void foo () {
int *p;
int next = 0;
while (1) {
my_vector_base dummy;
Iterator i;
for (; i.node!=(++i).node; ++i) *p = next++;
};
}
---------------------------------------
Here's what I get:
g/x> /home/bangerth/bin/gcc-3.4-tree-ssa/bin/c++ -O2 -c a.cc
a.cc: In function `void foo()':
a.cc:2: error: Vars Conflict across an abnormal edge
a.cc:2: internal compiler error: in tree_split_edge, at tree-cfg.c:4423
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
I have several additional grapples:
- the error message is really misleading: it indicates that there is
an error in user code, but there is none of course. It should really
read "internal compiler error:". Also, the mix of lower- and
uppercase letters is irritating, and the \n after the error line is
unnecessary
- something is weird: if I remove the curly braces around the single
statement after the while(node==y) in line 14, then the ICE goes
away. This is funny, since it doesn't change the semantics of the
program and I'm surprised that the actual form of the program is
passed down so deeply into the compiler. This certainly isn't good.
- a related smaller program is this:
--------------------------------
#include <vector>
#include <map>
void foo () {
unsigned int * array;
unsigned int next = 0;
while (1) {
std::map<unsigned int, int> c;
std::map<unsigned int, int>::iterator i;
for (; i!=c.end(); ++i)
array[1] = next++;
};
}
---------------------------------
This fails as well, but the error message indicates that it fails in
line 208 -- which doesn't exist. In the course of tracking this down,
the lines the compiler presented to me were barely more than a
misleading nuisance. Worth checking before the real error is fixed!
- Probably the same (just one additional variable):
---------------------------------
#include <vector>
#include <map>
void foo () {
unsigned int * array;
unsigned int next = 0;
while (1) {
std::vector<unsigned int> dummy;
std::map<unsigned int, int> c;
std::map<unsigned int, int>::iterator i;
for (; i!=c.end(); ++i)
array[1] = next++;
};
}
----------------------------------
This yields the same error twice, but no ICE:
g/x> /home/bangerth/bin/gcc-3.4-tree-ssa/bin/c++ -O2 -c y.cc
y.cc: In function `void foo()':
y.cc:208: error: Vars Conflict across an abnormal edge
y.cc:208: error: Vars Conflict across an abnormal edge
I guess that's all :-)
W.
More information about the Gcc-bugs
mailing list