This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/57489] New: [4.8 regression]: invalid code generated for conditional in template function
- From: "jhand at austin dot rr.com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 31 May 2013 19:50:01 +0000
- Subject: [Bug c++/57489] New: [4.8 regression]: invalid code generated for conditional in template function
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57489
Bug ID: 57489
Summary: [4.8 regression]: invalid code generated for
conditional in template function
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jhand at austin dot rr.com
Created attachment 30235
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30235&action=edit
test_parse.cpp
In gcc-4.8.0 and gcc-4.8.1-RC-20130527, g++ is generating some invalid code
that is causing my test regressions to fail. gcc-4.7.3 and gcc-4.6.3 both
generate valid code. Comping with -O2 or higher fails, while -O1 or lower
works. Adding -fno-inline allows the test to succeed. Changing test_parser() to
a non-template function also allows the test to succeed.
This has been tested only on a 64-bit environment on Fedora 16.
Here is a more complete description of the test. First, the code to parse the
number seems to be working properly. However, a conditional in the test, "if
(expected_v != actual_v || expected_i != actual_i)" seems to fail even though
expected_v == actual_v and expected_i == actual_i. When the test fails, it
generates the following message:
bad parse: "9223372036854775807": expected_v=9223372036854775807
actual_v=9223372036854775807 expected_i=19 actual_i=19
The number that is being parsed is equal to 0x7fffffffffffffff, however
slightly smaller numbers cause the test to still fail, and some number that is
smaller allows the test to succeed.
I'm attaching the simple test case that demonstrates the problem.
Compile with the following:
g++ -O2 -o test_parse test_parse.cpp