llvm-project/clang/test/AST/ByteCode/cxx11-pedantic.cpp
Timm Baeder 4eb66f7462
[clang][bytecode] Allow memory leaks before C++20 (#137445)
The expression allocating the memory wasn't valid in the first place.
This matches the diagnostic behavior of the current interpreter.
2025-04-26 07:13:44 +02:00

30 lines
1.1 KiB
C++

// RUN: %clang_cc1 -verify=both,expected -std=c++11 -triple x86_64-linux -pedantic %s -fexperimental-new-constant-interpreter
// RUN: %clang_cc1 -verify=both,ref -std=c++11 -triple x86_64-linux -pedantic %s
struct T { int n; };
const T t = { 42 }; // both-note 2{{declared here}}
struct S {
int m : t.n; // both-warning {{width of bit-field 'm' (42 bits)}} \
// both-warning {{expression is not an integral constant expression}} \
// both-note {{read of non-constexpr variable 't' is not allowed}}
};
static_assert(t.n == 42, ""); // both-error {{expression is not an integral constant expression}} \
// both-note {{read of non-constexpr variable 't' is not allowed}}
namespace DynamicCast {
struct S { int n; };
constexpr S s { 16 };
struct T {
int n : dynamic_cast<const S*>(&s)->n; // both-warning {{constant expression}} \
// both-note {{dynamic_cast}}
};
}
namespace NewDelete {
struct T {
int n : *new int(4); // both-warning {{constant expression}} \
// both-note {{until C++20}}
};
}