diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/opt/cfg4.C')
-rw-r--r-- | gcc/testsuite/g++.dg/opt/cfg4.C | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/opt/cfg4.C b/gcc/testsuite/g++.dg/opt/cfg4.C new file mode 100644 index 000000000..94522ed41 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/cfg4.C @@ -0,0 +1,45 @@ +// PR optimization/13067 +// Origin: <bryner@brianryner.com> + +// This used to fail on the tree-ssa because of "out-of-ssa" +// We might have a valid variable, but not a valid value when trying to find +// useless statements created by out-of-ssa translation. In this case +// val will be set to null, then later dereferenced. Bad. + +// { dg-do compile } +// { dg-options "-Os" } + + + +struct Iterator +{ + Iterator operator++(); +}; + +void GetChar(char* aChar); + +void foo(char aChar) +{ + char quote; + Iterator end; + + while (1) { + if (aChar == '"') + GetChar(&aChar); + + switch (aChar) { + case 'a': + ++end; + if (quote) { + if (quote == aChar) { + quote = 0; + } + } else { + quote = aChar; + } + } + } +} + + + |