
This has been explicitly forbidden since C++11, but somehow the edge case of converting a function pointer to void* using a cast like `(void*)f` wasn't handled. Fixes #150340 .
20 lines
1.3 KiB
C
20 lines
1.3 KiB
C
// RUN: %clang_cc1 -x c -fsyntax-only %s -verify=c -std=c11
|
|
// RUN: %clang_cc1 -x c -fsyntax-only %s -pedantic -verify=c-pedantic -std=c11
|
|
// RUN: %clang_cc1 -x c -fsyntax-only %s -verify=c -std=c11 -fexperimental-new-constant-interpreter
|
|
// RUN: %clang_cc1 -x c -fsyntax-only %s -pedantic -verify=c-pedantic -std=c11 -fexperimental-new-constant-interpreter
|
|
//
|
|
// RUN: %clang_cc1 -x c++ -fsyntax-only %s -verify=cxx
|
|
// RUN: %clang_cc1 -x c++ -fsyntax-only %s -pedantic -verify=cxx,cxx-pedantic
|
|
// RUN: %clang_cc1 -x c++ -fsyntax-only %s -verify=cxx -fexperimental-new-constant-interpreter
|
|
// RUN: %clang_cc1 -x c++ -fsyntax-only %s -pedantic -verify=cxx,cxx-pedantic -fexperimental-new-constant-interpreter
|
|
|
|
// c-no-diagnostics
|
|
|
|
void f(void);
|
|
struct S {char c;} s;
|
|
_Static_assert(&s != (void *)&f, ""); // c-pedantic-warning {{not an integer constant expression}} \
|
|
// c-pedantic-note {{this conversion is not allowed in a constant expression}} \
|
|
// cxx-error {{static assertion expression is not an integral constant expression}} \
|
|
// cxx-note {{cast that performs the conversions of a reinterpret_cast is not allowed in a constant expression}} \
|
|
// cxx-pedantic-warning {{'_Static_assert' is a C11 extension}}
|