llvm-project/clang/test/FixIt/fixit-static-assert.cpp
Corentin Jabot 95f50964fb Implement P2361 Unevaluated string literals
This patch proposes to handle in an uniform fashion
the parsing of strings that are never evaluated,
in asm statement, static assert, attrributes, extern,
etc.

Unevaluated strings are UTF-8 internally and so currently
behave as narrow strings, but these things will diverge with
D93031.

The big question both for this patch and the P2361 paper
is whether we risk breaking code by disallowing
encoding prefixes in this context.
I hope this patch may allow to gather some data on that.

Future work:
Improve the rendering of unicode characters, line break
and so forth in static-assert messages

Reviewed By: aaron.ballman, shafik

Differential Revision: https://reviews.llvm.org/D105759
2023-07-07 13:30:27 +02:00

26 lines
907 B
C++

// RUN: %clang_cc1 -std=c++14 %s -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
// Ensure no warnings are emitted in c++17.
// RUN: %clang_cc1 -std=c++17 %s -verify=cxx17
// RUN: %clang_cc1 -std=c++14 %s -fixit-recompile -fixit-to-temporary -Werror
// cxx17-no-diagnostics
static_assert(true && "String");
// CHECK-DAG: {[[@LINE-1]]:20-[[@LINE-1]]:22}:","
// String literal prefixes are good.
static_assert(true && R"(RawString)");
// CHECK-DAG: {[[@LINE-1]]:20-[[@LINE-1]]:22}:","
static_assert(true);
// CHECK-DAG: {[[@LINE-1]]:19-[[@LINE-1]]:19}:", \"\""
// While its technically possible to transform this to
// static_assert(true, "String") we don't attempt this fix.
static_assert("String" && true);
// CHECK-DAG: {[[@LINE-1]]:31-[[@LINE-1]]:31}:", \"\""
// Don't be smart and look in parentheses.
static_assert((true && "String"));
// CHECK-DAG: {[[@LINE-1]]:33-[[@LINE-1]]:33}:", \"\""