Bug 65876 - [6 Regression] [C++11] ICE in cxx_eval_call_expression, at cp/constexpr.c:1358
Summary: [6 Regression] [C++11] ICE in cxx_eval_call_expression, at cp/constexpr.c:1358
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 6.0
: P3 normal
Target Milestone: 5.2
Assignee: Jason Merrill
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-04-24 13:13 UTC by Mikhail Maltsev
Modified: 2015-12-07 04:54 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work: 4.7.4, 4.8.4, 4.9.2
Known to fail: 5.1.0, 6.0
Last reconfirmed: 2015-04-24 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mikhail Maltsev 2015-04-24 13:13:27 UTC
Consider the following code:

$ cat test.cc
template<int>
struct duration
{
    constexpr duration() : r(0) {}

    template<int TPeriod>
    constexpr duration(duration<TPeriod> x) : r(x.count()) {}

    constexpr int count() { return 0; }

    int r;
};

struct Config {
    duration<1> timeout { duration<2>() };
};

Config make_config()
{
    return {};
}

struct ConfigArray {
    ConfigArray();
    Config all_configs[1];
};

ConfigArray::ConfigArray()
{
}

When trying to compile it with GCC 5.1 or trunk r222403 using the following options:
$ g++ -c -std=c++11 ./test.cc

I get the following error:
./test.cc: In constructor 'ConfigArray::ConfigArray()':
./test.cc:28:26:   in constexpr expansion of 'Config()'
./test.cc:28:26:   in constexpr expansion of 'duration<1>(duration<2>())'
./test.cc:7:58:   in constexpr expansion of 'x.duration<<anonymous> >::count<2>()'
./test.cc:28:26: internal compiler error: in cxx_eval_call_expression, at cp/constexpr.c:1331
 ConfigArray::ConfigArray()
                          ^
0x7eb08e cxx_eval_call_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:1331
0x7ebf0c cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3038
0x7ef0ca cxx_eval_store_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:2651
0x7ec869 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3112
0x7ec052 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3365
0x7ec310 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229
0x7ec310 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229
0x7ebf64 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3406
0x7f229e cxx_eval_statement_list
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:2828
0x7ec76c cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3400
0x7eb188 cxx_eval_call_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:1365
0x7ebf0c cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3038
0x7ecc94 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3097
0x7ef0ca cxx_eval_store_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:2651
0x7ec869 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3112
0x7ec052 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3365
0x7ec310 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229
0x7ec310 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229
0x7ebf64 cxx_eval_constant_expression
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:3406
0x7f229e cxx_eval_statement_list
        /home/miyuki/gcc/src/gcc/cp/constexpr.c:2828
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
Comment 1 Marek Polacek 2015-04-24 13:28:04 UTC
Started with r220544.
Comment 2 Jason Merrill 2015-04-30 14:19:55 UTC
Author: jason
Date: Thu Apr 30 14:19:24 2015
New Revision: 222628

URL: https://gcc.gnu.org/viewcvs?rev=222628&root=gcc&view=rev
Log:
	PR c++/65876
	* constexpr.c (cxx_eval_call_expression): Fail gracefully if cgraph
	threw away DECL_SAVED_TREE.

Added:
    branches/gcc-5-branch/gcc/testsuite/g++.dg/cpp0x/constexpr-array12.C
Modified:
    branches/gcc-5-branch/gcc/cp/ChangeLog
    branches/gcc-5-branch/gcc/cp/constexpr.c
Comment 3 Jason Merrill 2015-04-30 14:22:08 UTC
Fixed for 5.2.
Comment 4 Richard Biener 2015-07-16 09:10:56 UTC
GCC 5.2 is being released, adjusting target milestone to 5.3.
Comment 5 Richard Biener 2015-12-04 10:43:23 UTC
GCC 5.3 is being released, adjusting target milestone.
Comment 6 Jason Merrill 2015-12-07 04:54:22 UTC
This seems to have been fixed for GCC 6 as well.