Skip to content

Commit

Permalink
Add BreakAfterAttributes: Always to .clang-format
Browse files Browse the repository at this point in the history
  • Loading branch information
Rangi42 committed Jan 28, 2025
1 parent 1587ebb commit 2cd83b8
Show file tree
Hide file tree
Showing 16 changed files with 71 additions and 44 deletions.
1 change: 1 addition & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ AttributeMacros:
BinPackArguments: false
BinPackParameters: false
BitFieldColonSpacing: Both
BreakAfterAttributes: Always
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Attach
BreakBeforeConceptDeclarations: true
Expand Down
9 changes: 6 additions & 3 deletions include/asm/warning.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,19 +64,22 @@ void processWarningFlag(char const *flag);

// Used to warn the user about problems that don't prevent the generation of
// valid code.
[[gnu::format(printf, 2, 3)]] void warning(WarningID id, char const *fmt, ...);
[[gnu::format(printf, 2, 3)]]
void warning(WarningID id, char const *fmt, ...);

// Used for errors that compromise the whole assembly process by affecting the
// following code, potencially making the assembler generate errors caused by
// the first one and unrelated to the code that the assembler complains about.
// It is also used when the assembler goes into an invalid state (for example,
// when it fails to allocate memory).
[[gnu::format(printf, 1, 2), noreturn]] void fatalerror(char const *fmt, ...);
[[gnu::format(printf, 1, 2), noreturn]]
void fatalerror(char const *fmt, ...);

// Used for errors that make it impossible to assemble correctly, but don't
// affect the following code. The code will fail to assemble but the user will
// get a list of all errors at the end, making it easier to fix all of them at
// once.
[[gnu::format(printf, 1, 2)]] void error(char const *fmt, ...);
[[gnu::format(printf, 1, 2)]]
void error(char const *fmt, ...);

#endif // RGBDS_ASM_WARNING_HPP
12 changes: 8 additions & 4 deletions include/error.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
#define RGBDS_ERROR_HPP

extern "C" {
[[gnu::format(printf, 1, 2)]] void warn(char const *fmt...);
[[gnu::format(printf, 1, 2)]] void warnx(char const *fmt, ...);
[[gnu::format(printf, 1, 2)]]
void warn(char const *fmt...);
[[gnu::format(printf, 1, 2)]]
void warnx(char const *fmt, ...);

[[gnu::format(printf, 1, 2), noreturn]] void err(char const *fmt, ...);
[[gnu::format(printf, 1, 2), noreturn]] void errx(char const *fmt, ...);
[[gnu::format(printf, 1, 2), noreturn]]
void err(char const *fmt, ...);
[[gnu::format(printf, 1, 2), noreturn]]
void errx(char const *fmt, ...);
}

#endif // RGBDS_ERROR_HPP
15 changes: 10 additions & 5 deletions include/gfx/main.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ struct Options {
static constexpr uint8_t VERB_TRACE = 5; // Step-by-step algorithm details
static constexpr uint8_t VERB_VVVVVV = 6; // What, can't I have a little fun?
// clang-format on
[[gnu::format(printf, 3, 4)]] void verbosePrint(uint8_t level, char const *fmt, ...) const;
[[gnu::format(printf, 3, 4)]]
void verbosePrint(uint8_t level, char const *fmt, ...) const;

mutable bool hasTransparentPixels = false;
uint8_t maxOpaqueColors() const { return nbColorsPerPal - hasTransparentPixels; }
Expand All @@ -66,19 +67,23 @@ struct Options {
extern Options options;

// Prints the error count, and exits with failure
[[noreturn]] void giveUp();
[[noreturn]]
void giveUp();
// If any error has been emitted thus far, calls `giveUp()`.
void requireZeroErrors();
// Prints a warning, and does not change the error count
[[gnu::format(printf, 1, 2)]] void warning(char const *fmt, ...);
[[gnu::format(printf, 1, 2)]]
void warning(char const *fmt, ...);
// Prints an error, and increments the error count
[[gnu::format(printf, 1, 2)]] void error(char const *fmt, ...);
[[gnu::format(printf, 1, 2)]]
void error(char const *fmt, ...);
// Prints an error, and increments the error count
// Does not take format arguments so `format_` and `-Wformat-security` won't complain about
// calling `errorMessage(msg)`.
void errorMessage(char const *msg);
// Prints a fatal error, increments the error count, and gives up
[[gnu::format(printf, 1, 2), noreturn]] void fatal(char const *fmt, ...);
[[gnu::format(printf, 1, 2), noreturn]]
void fatal(char const *fmt, ...);

struct Palette {
// An array of 4 GBC-native (RGB555) colors
Expand Down
3 changes: 2 additions & 1 deletion include/helpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
#else
// This seems to generate similar code to __builtin_unreachable, despite different semantics
// Note that executing this is undefined behavior (declared [[noreturn]], but does return)
[[noreturn]] static inline void unreachable_() {
[[noreturn]]
static inline void unreachable_() {
}
#endif

Expand Down
12 changes: 6 additions & 6 deletions include/link/main.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ struct FileStackNode {
std::string const &dump(uint32_t curLineNo) const;
};

[[gnu::format(printf, 3, 4)]] void
warning(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...);
[[gnu::format(printf, 3, 4)]] void
error(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...);
[[gnu::format(printf, 3, 4), noreturn]] void
fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...);
[[gnu::format(printf, 3, 4)]]
void warning(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...);
[[gnu::format(printf, 3, 4)]]
void error(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...);
[[gnu::format(printf, 3, 4), noreturn]]
void fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...);

#endif // RGBDS_LINK_MAIN_HPP
6 changes: 4 additions & 2 deletions src/asm/section.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ static std::pair<Symbol const *, Symbol const *> currentLoadLabelScopes = {nullp
int32_t loadOffset; // Offset into the LOAD section's parent (see sect_GetOutputOffset)

// A quick check to see if we have an initialized section
[[nodiscard]] static bool requireSection() {
[[nodiscard]]
static bool requireSection() {
if (currentSection)
return true;

Expand All @@ -59,7 +60,8 @@ int32_t loadOffset; // Offset into the LOAD section's parent (see sect_GetOutput

// A quick check to see if we have an initialized section that can contain
// this much initialized data
[[nodiscard]] static bool requireCodeSection() {
[[nodiscard]]
static bool requireCodeSection() {
if (!requireSection())
return false;

Expand Down
3 changes: 2 additions & 1 deletion src/asm/warning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,8 @@ void error(char const *fmt, ...) {
);
}

[[noreturn]] void fatalerror(char const *fmt, ...) {
[[noreturn]]
void fatalerror(char const *fmt, ...) {
va_list args;

va_start(args, fmt);
Expand Down
12 changes: 8 additions & 4 deletions src/error.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ static void vwarnx(char const *fmt, va_list ap) {
putc('\n', stderr);
}

[[noreturn]] static void verr(char const *fmt, va_list ap) {
[[noreturn]]
static void verr(char const *fmt, va_list ap) {
char const *error = strerror(errno);

fprintf(stderr, "error: ");
Expand All @@ -32,7 +33,8 @@ static void vwarnx(char const *fmt, va_list ap) {
exit(1);
}

[[noreturn]] static void verrx(char const *fmt, va_list ap) {
[[noreturn]]
static void verrx(char const *fmt, va_list ap) {
fprintf(stderr, "error: ");
vfprintf(stderr, fmt, ap);
putc('\n', stderr);
Expand All @@ -56,14 +58,16 @@ void warnx(char const *fmt, ...) {
va_end(ap);
}

[[noreturn]] void err(char const *fmt, ...) {
[[noreturn]]
void err(char const *fmt, ...) {
va_list ap;

va_start(ap, fmt);
verr(fmt, ap);
}

[[noreturn]] void errx(char const *fmt, ...) {
[[noreturn]]
void errx(char const *fmt, ...) {
va_list ap;

va_start(ap, fmt);
Expand Down
3 changes: 2 additions & 1 deletion src/fix/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ static void printUsage() {

static uint8_t nbErrors;

[[gnu::format(printf, 1, 2)]] static void report(char const *fmt, ...) {
[[gnu::format(printf, 1, 2)]]
static void report(char const *fmt, ...) {
va_list ap;

va_start(ap, fmt);
Expand Down
6 changes: 4 additions & 2 deletions src/gfx/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ static struct LocalOptions {

static uintmax_t nbErrors;

[[noreturn]] void giveUp() {
[[noreturn]]
void giveUp() {
fprintf(stderr, "Conversion aborted after %ju error%s\n", nbErrors, nbErrors == 1 ? "" : "s");
exit(1);
}
Expand Down Expand Up @@ -82,7 +83,8 @@ void errorMessage(char const *msg) {
nbErrors++;
}

[[noreturn]] void fatal(char const *fmt, ...) {
[[noreturn]]
void fatal(char const *fmt, ...) {
va_list ap;

fputs("FATAL: ", stderr);
Expand Down
3 changes: 2 additions & 1 deletion src/gfx/pal_spec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,8 @@ static T readLE(U const *bytes) {

// **Appends** the first line read from `file` to the end of the provided `buffer`.
// @return true if a line was read.
[[gnu::warn_unused_result]] static bool readLine(std::filebuf &file, std::string &buffer) {
[[gnu::warn_unused_result]]
static bool readLine(std::filebuf &file, std::string &buffer) {
assume(buffer.empty());
// TODO: maybe this can be optimized to bulk reads?
for (;;) {
Expand Down
6 changes: 4 additions & 2 deletions src/gfx/process.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ class ImagePalette {
// Registers a color in the palette.
// If the newly inserted color "conflicts" with another one (different color, but same CGB
// color), then the other color is returned. Otherwise, `nullptr` is returned.
[[nodiscard]] Rgba const *registerColor(Rgba const &rgba) {
[[nodiscard]]
Rgba const *registerColor(Rgba const &rgba) {
decltype(_colors)::value_type &slot = _colors[rgba.cgbColor()];

if (rgba.cgbColor() == Rgba::transparent) {
Expand Down Expand Up @@ -77,7 +78,8 @@ class Png {
int nbTransparentEntries;
png_bytep transparencyPal = nullptr;

[[noreturn]] static void handleError(png_structp png, char const *msg) {
[[noreturn]]
static void handleError(png_structp png, char const *msg) {
Png *self = reinterpret_cast<Png *>(png_get_error_ptr(png));

fatal("Error reading input image (\"%s\"): %s", self->c_str(), msg);
Expand Down
3 changes: 2 additions & 1 deletion src/gfx/reverse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ static DefaultInitVec<uint8_t> readInto(std::string const &path) {
return data;
}

[[noreturn]] static void pngError(png_structp png, char const *msg) {
[[noreturn]]
static void pngError(png_structp png, char const *msg) {
fatal(
"Error writing reversed image (\"%s\"): %s",
static_cast<char const *>(png_get_error_ptr(png)),
Expand Down
6 changes: 4 additions & 2 deletions src/link/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ void argErr(char flag, char const *fmt, ...) {
nbErrors++;
}

[[noreturn]] void fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) {
[[noreturn]]
void fatal(FileStackNode const *where, uint32_t lineNo, char const *fmt, ...) {
va_list args;

va_start(args, fmt);
Expand Down Expand Up @@ -308,7 +309,8 @@ static void parseScrambleSpec(char const *spec) {
}
}

[[noreturn]] void reportErrors() {
[[noreturn]]
void reportErrors() {
fprintf(
stderr, "Linking failed with %" PRIu32 " error%s\n", nbErrors, nbErrors == 1 ? "" : "s"
);
Expand Down
15 changes: 6 additions & 9 deletions test/gfx/rgbgfx_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
#include <unistd.h>
#else
#define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts
#include <windows.h>
#include <errhandlingapi.h>
#include <processthreadsapi.h>
#include <windows.h>
#undef max // This macro conflicts with `std::numeric_limits<...>::max()`
#endif

Expand Down Expand Up @@ -60,7 +60,8 @@ static void error(char const *fmt, ...) {
}
}

[[noreturn]] static void fatal(char const *fmt, ...) {
[[noreturn]]
static void fatal(char const *fmt, ...) {
va_list ap;

fputs("FATAL: ", stderr);
Expand Down Expand Up @@ -93,7 +94,8 @@ class Png {
int nbTransparentEntries;
png_bytep transparencyPal = nullptr;

[[noreturn]] static void handleError(png_structp png, char const *msg) {
[[noreturn]]
static void handleError(png_structp png, char const *msg) {
Png *self = reinterpret_cast<Png *>(png_get_error_ptr(png));

fatal("Error reading input image (\"%s\"): %s", self->path.c_str(), msg);
Expand Down Expand Up @@ -311,12 +313,7 @@ static char *execProg(char const *name, char * const *argv) {
if (int info; waitpid(pid, &info, 0) == -1 || !WIFEXITED(info)) {
fatal("Error waiting for %s: %s", name, strerror(errno));
} else if (int status = WEXITSTATUS(info); status != 0) {
fatal(
"%s returned with status %d\n\tThe command was: [%s]",
name,
status,
formatArgv()
);
fatal("%s returned with status %d\n\tThe command was: [%s]", name, status, formatArgv());
}

#else // defined(_MSC_VER) || defined(__MINGW32__)
Expand Down

0 comments on commit 2cd83b8

Please sign in to comment.