| Issue |
167384
|
| Summary |
clang suggests invalid fixits when warning `-Wunguarded-availability-new` is emitted
|
| Labels |
clang:diagnostics,
TBAA
|
| Assignees |
|
| Reporter |
ahatanak
|
$ cat test.c
```
int g __attribute__((availability(macosx,introduced=15)));
void foo(int);
void test1(void) {
int i1 = 1, i2 = g;
foo(i2);
foo(i1);
}
void test2(void) {
int i1 = g;
int i2 = i1;
foo(i2);
}
```
$ clang -c test.c -target arm64-apple-macosx14.0.0 -fdiagnostics-parseable-fixits
```
test.c:5:20: warning: 'g' is only available on macOS 15 or newer [-Wunguarded-availability-new]
5 | int i1 = 1, i2 = g;
| ^
test.c:1:5: note: 'g' has been marked as being introduced in macOS 15 here, but the deployment target is macOS
14.0.0
1 | int g __attribute__((availability(macosx,introduced=15)));
| ^
test.c:5:20: note: enclose 'g' in a __builtin_available check to silence this warning
5 | int i1 = 1, i2 = g;
| ^
6 | foo(i2);
|
fix-it:"test.c":{5:3-5:3}:"if (__builtin_available(macOS 15, *)) {\n "
fix-it:"test.c":{6:11-6:11}:"\n } else {\n // Fallback on earlier versions\n }"
test.c:11:12: warning: 'g' is only available on macOS 15 or newer [-Wunguarded-availability-new]
11 | int i1 = g;
| ^
test.c:1:5: note: 'g' has been marked as being introduced in macOS 15 here, but the deployment target is macOS
14.0.0
1 | int g __attribute__((availability(macosx,introduced=15)));
| ^
test.c:11:12: note: enclose 'g' in a __builtin_available check to silence this warning
11 | int i1 = g;
| ^
12 | int i2 = i1;
|
fix-it:"test.c":{11:3-11:3}:"if (__builtin_available(macOS 15, *)) {\n "
fix-it:"test.c":{12:15-12:15}:"\n } else {\n // Fallback on earlier versions\n }"
```
The second and the fourth fixits are incorrect as they would cause compilation errors.
`fix-it:"test.c":{6:11-6:11}:"\n } else {\n // Fallback on earlier versions\n }"` should be applied on line 7 so that `foo(i1);` is placed within the same scope as the declaration of `i1`.
`fix-it:"test.c":{12:15-12:15}:"\n } else {\n // Fallback on earlier versions\n }"` should be applied on line 13 so that `foo(i2);` is placed within the same scope as the declaration of `i2`.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs