[PATCH] D127306: [analyzer] Treat system globals as mutable if they are not const
Gabor Marton via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 9 06:53:20 PDT 2022
martong added a comment.
In D127306#3566984 <https://reviews.llvm.org/D127306#3566984>, @steakhal wrote:
> In D127306#3566761 <https://reviews.llvm.org/D127306#3566761>, @martong wrote:
>
>>> In theory, the engine should propagate taint in default eval call. If that would be the case, we would still have this report.
>>
>> How complex would it be to add the taint propagation to the engine/evalCall? Do you see that feasible as a parent patch of this?
>
> I see your point, but I don't think we should delay D124244 <https://reviews.llvm.org/D124244> because of that. By landing this, we could also land that. And the change you propose might take significantly longer to make and verify.
> I could make some prototypes, but I'm not making promises.
Ok.
One concern. Can we decide for a global **const system** variable if that it is a //system// variable? Consider `my_const_system_global`, it will be in `GlobalImmutableSpaceRegion`, however, it is also a //system// variable. Would it make sense to have a GlobalImmutable**System**SpaceRegion?
================
Comment at: clang/lib/StaticAnalyzer/Core/MemRegion.cpp:979-980
+ if (Ty.isConstQualified() && Ty->isArithmeticType()) {
// TODO: We could walk the complex types here and see if everything is
// constified.
+ sReg = getGlobalsRegion(MemRegion::GlobalImmutableSpaceRegionKind);
----------------
Is this comment still meaningful? I don't think so because if the type is const, then it does not matter what sub-types it has.
================
Comment at: clang/test/Analysis/globals-are-not-always-immutable.c:14
+void test_errno() {
+ errno = 2;
+ clang_analyzer_eval(errno == 2); // expected-warning {{TRUE}}
----------------
I am wondering if we should have another test for `assert(errno == 2);`. Because here we add a binding to the store, however, with the `assert` we add a constraint to the range based constraint manager and these are very much different cases.
The same applies to the below tests as well.
================
Comment at: clang/test/Analysis/globals-are-not-always-immutable.c:55
+ invalidate_globals();
+ clang_analyzer_eval(my_mutable_system_global == 2); // expected-warning {{UNKNOWN}} It was previously TRUE.
+}
----------------
Please highlight that this is the essence of the change.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127306/new/
https://reviews.llvm.org/D127306
More information about the cfe-commits
mailing list