baloghadamsoftware added a comment. Thank you for working on this! I agree, we should trust global initializers in `main()` in C. Can we maybe detect whether GNU global constructors are enabled or better: used?
================ Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:395 StoreRef getInitialStore(const LocationContext *InitLoc) override { + bool IsMainAnalysis = false; ---------------- I think this function deserves now some doc comments since it is not a trivial getter anymore. ================ Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:630 + (const RegionBindings::TreeTy *)((uintptr_t)store & ~(uintptr_t)1), + RBFactory.getTreeFactory(), (bool)((uintptr_t)store & (uintptr_t)1)); } ---------------- `(uintptr_t)1` look like a bit like some kind of magic number. Could we define it as a constant instead? ================ Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1693 const VarDecl *VD = VR->getDecl(); // Either the array or the array element has to be const. + if (VD->getType().isConstQualified() || ---------------- Please, update the comment as well. ================ Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1785 unsigned Index = FD->getFieldIndex(); // Either the record variable or the field has to be const qualified. + if (RecordVarTy.isConstQualified() || Ty.isConstQualified() || ---------------- This one as well. ================ Comment at: clang/lib/StaticAnalyzer/Core/RegionStore.cpp:2005 + if (B.isMainAnalysis()) + if (const Expr *Init = VD->getAnyInitializer()) ---------------- Please add a comment to the block as well. ================ Comment at: clang/test/Analysis/main.c:21 + return 0; +} ---------------- Please add a negative test case (i.e. function that is not `main`) as well. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65361/new/ https://reviews.llvm.org/D65361 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits