Skip to content

Commit

Permalink
tree-optimization/102801 - testcase for uninit diagnostic
Browse files Browse the repository at this point in the history
The following testcase is fixed in GCC 12+

	PR tree-optimization/102801
gcc/testsuite/
	* g++.dg/warn/Wuninitialized-33.C: New testcase.
  • Loading branch information
rguenth committed Sep 22, 2022
1 parent 32d8123 commit 44dba05
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions gcc/testsuite/g++.dg/warn/Wuninitialized-33.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// PR102801
// { dg-do compile }
// { dg-require-effective-target c++17 }
// { dg-options "-O2 -Wall" }

#include <algorithm>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>

class C {
bool b{}; // { dg-bogus "uninitialized" }

struct Shared {};
using SharedPtr = std::shared_ptr<const Shared>;

SharedPtr shared;

public:
C() = delete;
C(bool bIn) : b(bIn) {}
~C();
int someMethod() const;
};

using OptC = std::optional<C>;

class C2 {
OptC c;
public:
C2() = default;
C2(const C &cIn) : c(cIn) {}
~C2();
void operator()() const;
void swap(C2 &o) { std::swap(c, o.c); }
};


template <typename T>
class Q {
std::vector<T> queue;
public:
void Add(std::vector<T> &items) {
for (T & item : items) {
queue.push_back(T());
item.swap(queue.back());
}
}
void Exec();
};

extern void foo(Q<C2> & q, std::vector<C2> &items);
void foo(Q<C2> & q, std::vector<C2> &items) { q.Add(items); q.Exec(); }

0 comments on commit 44dba05

Please sign in to comment.