Created attachment 54474 [details] Reduced test case Found an ICE during build of gdal-3.5.3 library gdal-3.6.2/ogr/ogrsf_frmts/openfilegdb/filegdbindex_write.cpp: In instantiation of ‘bool OpenFileGDB::WriteIndex(VSILFILE*, std::vector<ValueOIDPair>&, void (*)(std::vector<unsigned char>&, const typename ValueOIDPair::first_type&, int), int&, int) [with ValueOIDPair = std::pair<long int, int>; VSILFILE = FILE; typename ValueOIDPair::first_type = long int]’: gdal-3.6.2/ogr/ogrsf_frmts/openfilegdb/filegdbindex_write.cpp:1300:27: required from here gdal-3.6.2/ogr/ogrsf_frmts/openfilegdb/filegdbindex_write.cpp:500:9: internal compiler error: in is_capture_proxy, at cp/lambda.cc:272
Created attachment 54475 [details] Result of -freport-bug Added full output of -freport-bug call
I can see the ICE but the reduced test seems overreduced and invalid; do you have the original .ii file?
Reduced better (to a valid testcase): ``` template <int> void f(void) { constexpr int IDX_PAGE_SIZE = 4096; int abyPage = [=, abyPage] { return IDX_PAGE_SIZE; }(); } void h() { f<1>(); } ```
(In reply to Marek Polacek from comment #2) > I can see the ICE but the reduced test seems overreduced and invalid; do you > have the original .ii file? It was attached in comment #1 too.
Oop, I overlooked that. Started with r12-6065. So I guess we just need to add the missing STRIP_ANY_LOCATION_WRAPPER somewhere.
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>: https://gcc.gnu.org/g:02d8ab3e4e2f3d9dc12157a98c976d6698e71e29 commit r13-6141-g02d8ab3e4e2f3d9dc12157a98c976d6698e71e29 Author: Marek Polacek <polacek@redhat.com> Date: Thu Feb 16 17:41:24 2023 -0500 c++: ICE with redundant capture [PR108829] Here we crash in is_capture_proxy: /* Location wrappers should be stripped or otherwise handled by the caller before using this predicate. */ gcc_checking_assert (!location_wrapper_p (decl)); We only crash with the redundant capture: int abyPage = [=, abyPage] { ... } because prune_lambda_captures is only called when there was a default capture, and with [=] only abyPage won't be in LAMBDA_EXPR_CAPTURE_LIST. The problem is that LAMBDA_CAPTURE_EXPLICIT_P wasn't propagated correctly and so var_to_maybe_prune proceeded where it shouldn't. Co-Authored by: Patrick Palka <ppalka@redhat.com> PR c++/108829 gcc/cp/ChangeLog: * pt.cc (prepend_one_capture): Set LAMBDA_CAPTURE_EXPLICIT_P. (tsubst_lambda_expr): Pass LAMBDA_CAPTURE_EXPLICIT_P to prepend_one_capture. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-108829-2.C: New test. * g++.dg/cpp0x/lambda/lambda-108829.C: New test.
Fixed on trunk so far.
The releases/gcc-12 branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>: https://gcc.gnu.org/g:12cdc0e266f02c3ba4e80c3d971463ff507e049b commit r12-9191-g12cdc0e266f02c3ba4e80c3d971463ff507e049b Author: Marek Polacek <polacek@redhat.com> Date: Thu Feb 16 17:41:24 2023 -0500 c++: ICE with redundant capture [PR108829] Here we crash in is_capture_proxy: /* Location wrappers should be stripped or otherwise handled by the caller before using this predicate. */ gcc_checking_assert (!location_wrapper_p (decl)); We only crash with the redundant capture: int abyPage = [=, abyPage] { ... } because prune_lambda_captures is only called when there was a default capture, and with [=] only abyPage won't be in LAMBDA_EXPR_CAPTURE_LIST. The problem is that LAMBDA_CAPTURE_EXPLICIT_P wasn't propagated correctly and so var_to_maybe_prune proceeded where it shouldn't. Co-Authored by: Patrick Palka <ppalka@redhat.com> PR c++/108829 gcc/cp/ChangeLog: * pt.cc (prepend_one_capture): Set LAMBDA_CAPTURE_EXPLICIT_P. (tsubst_lambda_expr): Pass LAMBDA_CAPTURE_EXPLICIT_P to prepend_one_capture. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-108829-2.C: New test. * g++.dg/cpp0x/lambda/lambda-108829.C: New test. (cherry picked from commit 02d8ab3e4e2f3d9dc12157a98c976d6698e71e29)
Fixed.