{
vec<gimple *> scc = worklist.pop ();
+ /* When we do 'replace_scc_by_value' it may happen that some EH edges
+ get removed. That means parts of CFG get removed. Those may
+ contain copy statements. For that reason we prune SCCs here. */
+ unsigned i;
+ for (i = 0; i < scc.length (); i++)
+ if (gimple_bb (scc[i]) == NULL)
+ scc.unordered_remove (i);
+ if (scc.is_empty ())
+ {
+ scc.release ();
+ continue;
+ }
+
auto_vec<gimple *> inner;
hash_set<tree> outer_ops;
tree last_outer_op = NULL_TREE;
--- /dev/null
+/* PR tree-optimization/117919 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fno-tree-forwprop -fnon-call-exceptions --param=early-inlining-insns=192 -std=c++20" } */
+
+char _M_p, _M_construct___beg;
+struct _Alloc_hider {
+ _Alloc_hider(char);
+};
+long _M_string_length;
+void _M_destroy();
+void _S_copy_chars(char *, char *, char *) noexcept;
+char _M_local_data();
+struct Trans_NS___cxx11_basic_string {
+ _Alloc_hider _M_dataplus;
+ bool _M_is_local() {
+ if (_M_local_data())
+ if (_M_string_length)
+ return true;
+ return false;
+ }
+ void _M_dispose() {
+ if (!_M_is_local())
+ _M_destroy();
+ }
+ char *_M_construct___end;
+ Trans_NS___cxx11_basic_string(Trans_NS___cxx11_basic_string &)
+ : _M_dataplus(0) {
+ struct _Guard {
+ ~_Guard() { _M_guarded->_M_dispose(); }
+ Trans_NS___cxx11_basic_string *_M_guarded;
+ } __guard0;
+ _S_copy_chars(&_M_p, &_M_construct___beg, _M_construct___end);
+ }
+};
+namespace filesystem {
+struct path {
+ path();
+ Trans_NS___cxx11_basic_string _M_pathname;
+};
+} // namespace filesystem
+struct FileWriter {
+ filesystem::path path;
+ FileWriter() : path(path) {}
+};
+struct LanguageFileWriter : FileWriter {
+ LanguageFileWriter(filesystem::path) {}
+};
+int
+main() {
+ filesystem::path output_file;
+ LanguageFileWriter writer(output_file);
+}