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).