public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer
@ 2012-02-07  1:00 zeratul976 at hotmail dot com
  2012-02-07 13:52 ` [Bug c++/52145] " daniel.kruegler at googlemail dot com
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: zeratul976 at hotmail dot com @ 2012-02-07  1:00 UTC (permalink / raw)
  To: gcc-bugs

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

             Bug #: 52145
           Summary: [C++11] zero-valued integer constant expression should
                    prefer conversion to pointer
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: zeratul976@hotmail.com


In the following example:

#include <iostream>
using std::cerr;

struct S { int n; };
struct X { X(int) {} };
void f(void*)
{
    cerr << "Pointer!\n";
}
void f(X)
{
    cerr << "X!\n";
}
int main()
{
    f(S().n);
}

With GCC 4.7.0-20120128 with the --std=c++11 flag, the output is "X!". The
correct output would be "Pointer!".

The reason is that S's implicit default constructor is constexpr, so it
value-initializes n. Therefore S().n is a zero-valued integer constant
expression, whose conversion to a pointer is preferred over the user-defined
conversion to X.

(This example was taken from Chandler Carruth's talk at the GoingNative 2012
conference.)


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
@ 2012-02-07 13:52 ` daniel.kruegler at googlemail dot com
  2012-02-07 14:39 ` [Bug c++/52145] [C++11] [DR 903] " redi at gcc dot gnu.org
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2012-02-07 13:52 UTC (permalink / raw)
  To: gcc-bugs

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

Daniel Krügler <daniel.kruegler at googlemail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |daniel.kruegler at
                   |                            |googlemail dot com

--- Comment #1 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2012-02-07 13:51:59 UTC ---
(In reply to comment #0)
The core language is in the process to make it clear, that S().n no longer is a
null-pointer constant, see

http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903

This would mean that the current behaviour is as intended. I would make the
outcome of this issue dependent on the final CWG 903 decision.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
  2012-02-07 13:52 ` [Bug c++/52145] " daniel.kruegler at googlemail dot com
@ 2012-02-07 14:39 ` redi at gcc dot gnu.org
  2012-04-26 19:43 ` jyasskin at gcc dot gnu.org
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2012-02-07 14:39 UTC (permalink / raw)
  To: gcc-bugs

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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |SUSPENDED
   Last reconfirmed|                            |2012-02-07
            Summary|[C++11] zero-valued integer |[C++11] [DR 903]
                   |constant expression should  |zero-valued integer
                   |prefer conversion to        |constant expression should
                   |pointer                     |prefer conversion to
                   |                            |pointer
     Ever Confirmed|0                           |1

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-02-07 14:39:07 UTC ---
suspending


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
  2012-02-07 13:52 ` [Bug c++/52145] " daniel.kruegler at googlemail dot com
  2012-02-07 14:39 ` [Bug c++/52145] [C++11] [DR 903] " redi at gcc dot gnu.org
@ 2012-04-26 19:43 ` jyasskin at gcc dot gnu.org
  2012-04-26 23:03 ` paolo.carlini at oracle dot com
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: jyasskin at gcc dot gnu.org @ 2012-04-26 19:43 UTC (permalink / raw)
  To: gcc-bugs

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

Jeffrey Yasskin <jyasskin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|SUSPENDED                   |NEW
                 CC|                            |jyasskin at gcc dot gnu.org

--- Comment #3 from Jeffrey Yasskin <jyasskin at gcc dot gnu.org> 2012-04-26 19:42:19 UTC ---
A simpler test case is:

$ cat test.cc
const long kNullPtr = 0;
const long* ptr = kNullPtr;
$ g++-4.7pre -c test.cc -std=gnu++11
test.cc:2:19: error: invalid conversion from ‘long int’ to ‘const long int*’
[-fpermissive]
$ g++-4.7pre --version
g++-4.7pre (GCC) 4.7.1 20120412 (prerelease)


I'm going to unsuspend this because DR903 is "ready", and gcc-4.7's behavior
doesn't match either the proposed wording or the current definition of C++11.
The proposed wording discusses a change to C++17 rather than to C++11 (we can
tell because it adds a "C.3 C++ and ISO C++ 2011" section), so the new error
should only show up under -std=gnu++17, and be a warning in -std=gnu++11.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (2 preceding siblings ...)
  2012-04-26 19:43 ` jyasskin at gcc dot gnu.org
@ 2012-04-26 23:03 ` paolo.carlini at oracle dot com
  2012-04-26 23:06 ` jyasskin at gcc dot gnu.org
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: paolo.carlini at oracle dot com @ 2012-04-26 23:03 UTC (permalink / raw)
  To: gcc-bugs

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

Paolo Carlini <paolo.carlini at oracle dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |paolo.carlini at oracle dot
                   |                            |com

--- Comment #4 from Paolo Carlini <paolo.carlini at oracle dot com> 2012-04-26 23:03:11 UTC ---
17?


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (3 preceding siblings ...)
  2012-04-26 23:03 ` paolo.carlini at oracle dot com
@ 2012-04-26 23:06 ` jyasskin at gcc dot gnu.org
  2012-04-26 23:14 ` paolo.carlini at oracle dot com
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: jyasskin at gcc dot gnu.org @ 2012-04-26 23:06 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Jeffrey Yasskin <jyasskin at gcc dot gnu.org> 2012-04-26 23:06:05 UTC ---
"17" was the rough consensus at Kona for the target for the next standard. You
could use -std=c++1y or c++1x or whatever instead.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (4 preceding siblings ...)
  2012-04-26 23:06 ` jyasskin at gcc dot gnu.org
@ 2012-04-26 23:14 ` paolo.carlini at oracle dot com
  2012-04-26 23:57 ` jyasskin at gcc dot gnu.org
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: paolo.carlini at oracle dot com @ 2012-04-26 23:14 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Paolo Carlini <paolo.carlini at oracle dot com> 2012-04-26 23:14:18 UTC ---
Oh, Ok, I wasn't there. In GCC we currently use -std=c++1y, but you know that.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (5 preceding siblings ...)
  2012-04-26 23:14 ` paolo.carlini at oracle dot com
@ 2012-04-26 23:57 ` jyasskin at gcc dot gnu.org
  2014-12-10 13:30 ` redi at gcc dot gnu.org
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: jyasskin at gcc dot gnu.org @ 2012-04-26 23:57 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from Jeffrey Yasskin <jyasskin at gcc dot gnu.org> 2012-04-26 23:56:22 UTC ---
Oops, I didn't actually realize you'd allocated an option for that in 4.8, and
was just making one up. Sorry for the distraction.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (6 preceding siblings ...)
  2012-04-26 23:57 ` jyasskin at gcc dot gnu.org
@ 2014-12-10 13:30 ` redi at gcc dot gnu.org
  2021-12-04  6:43 ` pinskia at gcc dot gnu.org
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2014-12-10 13:30 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |accepts-invalid

--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> ---
DR 903 is a DR against C++11 ([diff.cpp03.conv] identifies it as an
incompatibility with C++03, not with C++11).

Clang also implements DR 903 in C++11 mode.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (7 preceding siblings ...)
  2014-12-10 13:30 ` redi at gcc dot gnu.org
@ 2021-12-04  6:43 ` pinskia at gcc dot gnu.org
  2021-12-04  6:43 ` pinskia at gcc dot gnu.org
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-04  6:43 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dominique.pelle at gmail dot com

--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 88655 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (8 preceding siblings ...)
  2021-12-04  6:43 ` pinskia at gcc dot gnu.org
@ 2021-12-04  6:43 ` pinskia at gcc dot gnu.org
  2021-12-04  6:52 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-04  6:43 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rs2740 at gmail dot com

--- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 77712 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (9 preceding siblings ...)
  2021-12-04  6:43 ` pinskia at gcc dot gnu.org
@ 2021-12-04  6:52 ` pinskia at gcc dot gnu.org
  2021-12-07 12:39 ` pinskia at gcc dot gnu.org
  2022-10-14 15:14 ` pinskia at gcc dot gnu.org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-04  6:52 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|88655                       |94404
              Alias|                            |cwg903

--- Comment #11 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is a testcase which tests all of the null pointerness in C++11 (+):
#include <cstddef>
extern "C" int puts(const char*);
typedef unsigned long uint64_t;
typedef long int64_t;

struct Foo { Foo(int64_t) { } };
bool t = true;

void foo(const char*)
{
  if (t)
    __builtin_abort();
  puts("In foo(const char*)");
}

void foo(const Foo&)
{
  if (!t)
    __builtin_abort();
  puts("In foo(const Foo&)");
}

int main()
{
#if __cplusplus >= 201103L
  t= true;
#else
  t= false;
#endif
  foo((int)0);
  foo((unsigned)0);
  foo((short)0);
  foo((unsigned short)0);
  foo((int64_t)0);
  foo((uint64_t)0);
  foo(int());
#if __cplusplus >= 201103L
  foo(int{});
  t= false;
  foo(nullptr);
#endif
  foo(0u);
  foo(0ul);
  foo(0ull);
  foo(0);
  foo(NULL);
}

---- CUT ----
We get this right for C++98 but wrong for C++11.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88655
[Bug 88655] Different overloaded function being called depending on which
compiler is used
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94404
[Bug 94404] [meta-bug] C++ core issues

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (10 preceding siblings ...)
  2021-12-04  6:52 ` pinskia at gcc dot gnu.org
@ 2021-12-07 12:39 ` pinskia at gcc dot gnu.org
  2022-10-14 15:14 ` pinskia at gcc dot gnu.org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07 12:39 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |darktemplar at basealt dot ru

--- Comment #12 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 96761 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/52145] [C++11] [DR 903] zero-valued integer constant expression should prefer conversion to pointer
  2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
                   ` (11 preceding siblings ...)
  2021-12-07 12:39 ` pinskia at gcc dot gnu.org
@ 2022-10-14 15:14 ` pinskia at gcc dot gnu.org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-10-14 15:14 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |xmh970252187 at gmail dot com

--- Comment #13 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 107260 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-10-14 15:14 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-07  1:00 [Bug c++/52145] New: [C++11] zero-valued integer constant expression should prefer conversion to pointer zeratul976 at hotmail dot com
2012-02-07 13:52 ` [Bug c++/52145] " daniel.kruegler at googlemail dot com
2012-02-07 14:39 ` [Bug c++/52145] [C++11] [DR 903] " redi at gcc dot gnu.org
2012-04-26 19:43 ` jyasskin at gcc dot gnu.org
2012-04-26 23:03 ` paolo.carlini at oracle dot com
2012-04-26 23:06 ` jyasskin at gcc dot gnu.org
2012-04-26 23:14 ` paolo.carlini at oracle dot com
2012-04-26 23:57 ` jyasskin at gcc dot gnu.org
2014-12-10 13:30 ` redi at gcc dot gnu.org
2021-12-04  6:43 ` pinskia at gcc dot gnu.org
2021-12-04  6:43 ` pinskia at gcc dot gnu.org
2021-12-04  6:52 ` pinskia at gcc dot gnu.org
2021-12-07 12:39 ` pinskia at gcc dot gnu.org
2022-10-14 15:14 ` 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).