This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/54946] New: ICE on template parameter from cast char-pointer in C++11 constexpr struct


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54946

             Bug #: 54946
           Summary: ICE on template parameter from cast char-pointer in
                    C++11 constexpr struct
    Classification: Unclassified
           Product: gcc
           Version: 4.7.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: bisqwit@iki.fi


The following C++11 code causes an ICE.

template<conts char*s>    static void testfunc();
constexpr struct testtype { const char* str; } test = { "abc"} ;
void (*functionpointer)() = testfunc<(const char*) test.str>;

Sample GCC commandline to invoke the error: g++ test1.cc -std=c++0x

Error message on g++-4.7.1 (Debian 4.7.1-7 on x86_64)
test1.cc:5:29: internal compiler error: in convert_nontype_argument, at
cp/pt.c:5794

Error message on g++-4.6.3 (Debian 4.6.3-11 on x86_64):
test1.cc:5:29: internal compiler error: in convert_nontype_argument, at
cp/pt.c:5430

I do not know whether the code is valid.
Things that do not affect the error:
- Adding / removing "const" at any point or changing pointers into arrays at
any point
- Changing functionpointer into an array of function pointers
- Any code generation related options (such as -m32 or optimization levels)

Things that do hide the error:
- Removing the (const char*) cast entirely
- Changing the string pointers into integers
- Removing the struct encapsulation from str (making it constexpr const char*
str = "abc"; and removing "test." from the third line)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]