You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ignore the `[[malloc(x)]]` or `[[malloc(x, 1)]]` function attribute
syntax added in [GCC 11][1] and print a warning instead of an error.
Unlike `[[malloc]]` with no arguments (which is supported by Clang),
GCC uses the one or two argument form to specify a deallocator for
GCC's static analyzer.
Code currently compiled with `[[malloc(x)]]` or
`__attribute((malloc(x)))` fails with the following error:
`'malloc' attribute takes no arguments`.
[1]: https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;f=gcc/doc/extend.texi;h=dce6c58db87ebf7f4477bd3126228e73e4eeee97#patch6Fixes: #51607
Partial-Bug: #53152
inline __attribute__((noreturn(a))) void*f1(void); // expected-error {{'noreturn' attribute takes no arguments}}
5
9
inline __attribute__((always_inline(a))) void*f2(void); // expected-error {{'always_inline' attribute takes no arguments}}
6
10
inline __attribute__((cdecl(a))) void*f3(void); // expected-error {{'cdecl' attribute takes no arguments}}
7
11
inline __attribute__((const(a))) void*f4(void); // expected-error {{'const' attribute takes no arguments}}
8
12
inline __attribute__((fastcall(a))) void*f5(void); // expected-error {{'fastcall' attribute takes no arguments}}
9
-
inline __attribute__((malloc(a))) void*f5(void); // expected-error {{'malloc' attribute takes no arguments}}
13
+
inline __declspec(restrict(a)) void*f6_a(void); // expected-error {{'restrict' attribute takes no arguments}}
14
+
inline __attribute__((malloc(func_a, 1, a))) void*f6_b(void); // expected-error {{'malloc' attribute takes no more than 2 arguments}}
15
+
inline __attribute__((malloc(func_a, 1))) void*f6_c(void); // expected-warning {{'malloc' attribute ignored because Clang does not yet support this attribute signature}}
16
+
inline __attribute__((malloc(1234))) void*f6_d(void); // expected-error {{'malloc' argument for deallocator is not a function}}
17
+
inline __attribute__((malloc(a))) void*f6_e(void); // expected-error {{'malloc' argument 'a' is not a function}}
18
+
inline __attribute__((malloc(ambigious_func))) void*f6_f(void); // expected-error {{'malloc' argument 'ambigious_func' is not a single function}}
19
+
inline __attribute__((malloc(func_b))) void*f6_g(void); // expected-error {{'malloc' argument 'func_b' must take a pointer type as its first argument}}
20
+
inline __attribute__((malloc(func_a, 3))) void*f6_h(void); // expected-error {{'malloc' attribute parameter 2 is out of bounds}}
21
+
inline __attribute__((malloc(func_a, 2))) void*f6_i(void); // expected-error {{'malloc' argument '2' refers to non-pointer type 'int' of 'func_a'}}
10
22
inline __attribute__((nothrow(a))) void*f7(void); // expected-error {{'nothrow' attribute takes no arguments}}
11
23
inline __attribute__((stdcall(a))) void*f8(void); // expected-error {{'stdcall' attribute takes no arguments}}
12
24
inline __attribute__((used(a))) void*f9(void); // expected-error {{'used' attribute takes no arguments}}
0 commit comments