public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/101622] New: Type erasure (upcasting) in constexpr/consteval context
@ 2021-07-26 6:14 sjeltsch at gmail dot com
2021-07-26 9:22 ` [Bug c++/101622] " redi at gcc dot gnu.org
2022-01-04 19:15 ` ppalka at gcc dot gnu.org
0 siblings, 2 replies; 3+ messages in thread
From: sjeltsch at gmail dot com @ 2021-07-26 6:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101622
Bug ID: 101622
Summary: Type erasure (upcasting) in constexpr/consteval
context
Product: gcc
Version: 10.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sjeltsch at gmail dot com
Target Milestone: ---
Source:
```
template <typename T> void fun() {}
template<typename T> inline constexpr bool var = false;
consteval bool funC() {
void (*a)() = fun<int>;
void (*b)() = fun<float>;
return a == b;
}
constexpr auto x = funC();
consteval bool varC() {
const void* a = &var<int>;
const void* b = &var<float>;
return a == b;
}
constexpr auto y = varC();
int main() { return 0; }
```
output:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 10.2.1-6'
--with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with
-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu-
--enable-shared --enable-linker-build-id --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --libdir=/usr/lib
--enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new
--enable-gnu-unique-object --disable-vtable-verify --enable-plugin --ena
ble-default-pie --with-system-zlib --enable-libphobos-checking=release
--with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch
--disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-
list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-10-Km9U7s/gcc-10-10.2.1/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-Km9U7s/gcc-10-10.2.1/debian/tmp-gcn
/usr,hsa --without-cuda-driver --enable-checking=release
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-build-config=bootstrap-lto-lean --enable-link-mutex
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.1 20210110 (Debian 10.2.1-6)
COLLECT_GCC_OPTIONS='-std=c++2a' '-v' '-o' 'foo' '-shared-libgcc'
'-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/10/cc1plus -quiet -v -imultiarch
x86_64-linux-gnu -D_GNU_SOURCE foo.cc -quiet -dumpbase foo.cc -mtune=generic
-march=x86-64 -auxbase foo -std=c++2a -version -fasynchronous-unwind-t
ables -o /tmp/ccp7WoOR.s
GNU C++17 (Debian 10.2.1-6) version 10.2.1 20210110 (x86_64-linux-gnu)
compiled by GNU C version 10.2.1 20210110, GMP version 6.2.1, MPFR
version 4.1.0, MPC version 1.2.0, isl version isl-0.23-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/10"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/include-fixed"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/10
/usr/include/x86_64-linux-gnu/c++/10
/usr/include/c++/10/backward
/usr/lib/gcc/x86_64-linux-gnu/10/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
GNU C++17 (Debian 10.2.1-6) version 10.2.1 20210110 (x86_64-linux-gnu)
compiled by GNU C version 10.2.1 20210110, GMP version 6.2.1, MPFR
version 4.1.0, MPC version 1.2.0, isl version isl-0.23-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 048fcaee3460a99eb0d68522358720e1
foo.cc:8:12: error: ‘(fun<int> == fun<float>)’ is not a constant expression
8 | return a == b;
| ~~^~~~
foo.cc:16:12: error: ‘(((const void*)(& var<int>)) == ((const void*)(&
var<float>)))’ is not a constant expression
16 | return a == b;
| ~~^~~~
make: *** [<builtin>: foo] Error 1
AFAIU there are some limits to static/reinterpret casting that you can do in a
constexpr/consteval context. However, if that was the case here I would rather
expect the variable assignment to fail.
(Not as an argument but rather as some extra signal, the above code compiles
with clang. If in fact it shouldn't compile, I'm happy to take the bug to
clang).
Thanks!
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/101622] Type erasure (upcasting) in constexpr/consteval context
2021-07-26 6:14 [Bug c++/101622] New: Type erasure (upcasting) in constexpr/consteval context sjeltsch at gmail dot com
@ 2021-07-26 9:22 ` redi at gcc dot gnu.org
2022-01-04 19:15 ` ppalka at gcc dot gnu.org
1 sibling, 0 replies; 3+ messages in thread
From: redi at gcc dot gnu.org @ 2021-07-26 9:22 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101622
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Last reconfirmed| |2021-07-26
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I think the code is valid.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/101622] Type erasure (upcasting) in constexpr/consteval context
2021-07-26 6:14 [Bug c++/101622] New: Type erasure (upcasting) in constexpr/consteval context sjeltsch at gmail dot com
2021-07-26 9:22 ` [Bug c++/101622] " redi at gcc dot gnu.org
@ 2022-01-04 19:15 ` ppalka at gcc dot gnu.org
1 sibling, 0 replies; 3+ messages in thread
From: ppalka at gcc dot gnu.org @ 2022-01-04 19:15 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101622
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |DUPLICATE
Status|NEW |RESOLVED
CC| |ppalka at gcc dot gnu.org
--- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Thanks for the bug report. This appears to be a dup of PR94716 which has
recently been fixed for GCC 12.
*** This bug has been marked as a duplicate of bug 94716 ***
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-01-04 19:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-26 6:14 [Bug c++/101622] New: Type erasure (upcasting) in constexpr/consteval context sjeltsch at gmail dot com
2021-07-26 9:22 ` [Bug c++/101622] " redi at gcc dot gnu.org
2022-01-04 19:15 ` ppalka 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).