Issue |
141506
|
Summary |
[clang][enhancement] operator overload attribute for C
|
Labels |
clang
|
Assignees |
|
Reporter |
olemayu
|
Simple and elegant. Just like C itself.
```c
typedef struct vec3 {
float x, y, z;
} vec3;
[[clang::operator(*)]]
inline vec3 v3v3_mul(vec3 lhs, vec3 rhs) {
return (vec3) { lhs.x * rhs.x, lhs.y * rhs.y, lhs.z * rhs.z };
}
[[clang::operator(*)]]
inline vec3 v3v1_mul(vec3 lhs, float rhs) {
return (vec3) { lhs.x * rhs, lhs.y * rhs, lhs.z * rhs };
}
// lhs/self expected to be a pointer for assignment operators
[[clang::operator(*=)]]
inline vec3 v3v3_smul(vec3* self, vec3 rhs) {
self->x *= rhs.x;
self->y *= rhs.y;
self->z *= rhs.z;
return *self;
}
[[clang::operator(*=)]]
inline vec3 v3v1_smul(vec3* self, float rhs) {
self->x *= rhs;
self->y *= rhs;
self->z *= rhs;
return *self;
}
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs