[clang] [Clang] Add attribute for consteval builtins; Declare constexpr builtins as constexpr in C++ (PR #91894)

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Mon May 13 10:53:23 PDT 2024


================
@@ -14,13 +14,18 @@ void __builtin_va_copy(double d);
 // expected-error at +2 {{cannot redeclare builtin function '__builtin_va_end'}}
 // expected-note at +1 {{'__builtin_va_end' is a builtin with type}}
 void __builtin_va_end(__builtin_va_list);
-// RUN: %clang_cc1 %s -fsyntax-only -verify 
-// RUN: %clang_cc1 %s -fsyntax-only -verify -x c
 
 void __va_start(__builtin_va_list*, ...);
 
+          void *__builtin_assume_aligned(const void *, size_t, ...);
 #ifdef __cplusplus
-void *__builtin_assume_aligned(const void *, size_t, ...) noexcept;
-#else
-void *__builtin_assume_aligned(const void *, size_t, ...);
+constexpr void *__builtin_assume_aligned(const void *, size_t, ...);
+          void *__builtin_assume_aligned(const void *, size_t, ...) noexcept;
+constexpr void *__builtin_assume_aligned(const void *, size_t, ...) noexcept;
+          void *__builtin_assume_aligned(const void *, size_t, ...) throw();
+constexpr void *__builtin_assume_aligned(const void *, size_t, ...) throw();
+
----------------
zygoloid wrote:

I don't think there are particularly good non-historical reasons why we allow non-`LIBBUILTIN` builtins to be redeclared -- I think it's allowed primarily for compatibility with GCC and existing code, and it's not clear to me why GCC allows it. There were some examples of code redeclaring builtins in [this prior review thread](https://reviews.llvm.org/D45383).

https://github.com/llvm/llvm-project/pull/91894


More information about the cfe-commits mailing list