public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/113368] New: ICE appearing in 13, not before.
@ 2024-01-13 1:10 ephraim.feldblum at redis dot com
2024-01-13 1:14 ` [Bug c++/113368] " pinskia at gcc dot gnu.org
0 siblings, 1 reply; 2+ messages in thread
From: ephraim.feldblum at redis dot com @ 2024-01-13 1:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113368
Bug ID: 113368
Summary: ICE appearing in 13, not before.
Product: gcc
Version: 13.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ephraim.feldblum at redis dot com
Target Milestone: ---
godbolt: https://godbolt.org/z/qj1WcvxMx
Hi, I've encountered an ICE. It seems to be maybe caused by some combination of
* using gcc 13.1 or 13.2 (at least on godbolt)
* static member init of a std::pair,
* member init of a std::array,
* using std::countr_zero(),
* using a std::optional,
* all when constant folding.
If any of those are changed, the ICE disappears.
--------------------------------------------------------------------------------
input:
#include <array> // std::array
#include <bit> // std::countr_zero
#include <optional> // std::optional
#include <utility> // std::pair
template <int U>
struct VEB {
private:
// doesn't seem to ICE without a pair
static constexpr std::pair<int, int> G = {1, 1};
// doesn't seem to ICE without an array, with at least one of the template
params being one of the pair.
std::array<VEB<G.first>, 1> cluster = {};
// std::array<VEB<1>, G.second> cluster = {};
public:
constexpr void insert(int x) {
cluster[x].min();
}
};
template <int U>
requires(U <= 64)
struct VEB<U> {
private:
unsigned cluster = {};
public:
// doesn't seem to ICE without an optional
constexpr std::optional<int> min() const {
// doesn't seem to ICE without std::countr_zero
return std::countr_zero(cluster);
}
};
// doesn't ICE without constant folding. either constexpr or consteval
constexpr auto check_correctness() {
VEB<65> veb{};
veb.insert(0);
return true; // doesn't ICE without the return
};
// alternatively, if consteval, ICEs without return
// consteval auto check_correctness() {
// VEB<65> veb{};
// veb.insert(0);
// } // does not need the return to ICE
// doesn't ICE without constant folding, -O or better is required
int main() {
check_correctness();
}
--------------------------------------------------------------------------------
output:
<source>: In function 'int main()':
<source>:49:22: in 'constexpr' expansion of 'check_correctness()'
<source>:37:15: in 'constexpr' expansion of 'veb.VEB<65>::insert(0)'
<source>:17:23: in 'constexpr' expansion of
'(&((VEB<65>*)this)->VEB<65>::cluster.std::array<VEB<1>,
1>::operator[](((std::array<VEB<1>, 1>::size_type)x)))->VEB<1>::min()'
<source>:50:1: in 'constexpr' expansion of 'VEB<1>()'
<source>:50:1: internal compiler error: in cxx_eval_component_reference, at
cp/constexpr.cc:4394
50 | }
| ^
0x1ce7bde internal_error(char const*, ...)
???:0
0x7290fc fancy_abort(char const*, int, char const*)
???:0
0x77e950 maybe_constant_value(tree_node*, tree_node*, mce_value)
???:0
0x11175b3 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
???:0
0x11178a6 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
???:0
0x79792c cp_fold_function(tree_node*)
???:0
0x7cb265 finish_function(bool)
???:0
0x89fd5b c_parse_file()
???:0
0x98c5d9 c_common_parse_file()
???:0
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Bug c++/113368] ICE appearing in 13, not before.
2024-01-13 1:10 [Bug c++/113368] New: ICE appearing in 13, not before ephraim.feldblum at redis dot com
@ 2024-01-13 1:14 ` pinskia at gcc dot gnu.org
0 siblings, 0 replies; 2+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-01-13 1:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113368
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |DUPLICATE
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Dup. Fixed on the trunk already too.
*** This bug has been marked as a duplicate of bug 110997 ***
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-01-13 1:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-13 1:10 [Bug c++/113368] New: ICE appearing in 13, not before ephraim.feldblum at redis dot com
2024-01-13 1:14 ` [Bug c++/113368] " pinskia at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).