[PATCH] D46421: [analyzer][CrossTU] Extend CTU to VarDecls with initializer
Gábor Horváth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon May 14 08:56:45 PDT 2018
xazax.hun added a comment.
The analyzer can only reason about const variables this way, right? Maybe we should only import the initializers for such variables to have better performance? What do you think?
Also, I wonder what happens with user-defined classes. Will the analyzer evaluate the constructor if the variable is imported?
================
Comment at: include/clang/CrossTU/CrossTranslationUnit.h:114
+ llvm::Expected<const VarDecl *>
+ getCrossTUDefinition(const VarDecl *VD, StringRef CrossTUDir,
+ StringRef IndexName);
----------------
I wonder if we need these overloads. Maybe having only the templated version and having a static assert for the supported types is better? Asking the other reviewers as well.
================
Comment at: include/clang/CrossTU/CrossTranslationUnit.h:138
llvm::Expected<const FunctionDecl *> importDefinition(const FunctionDecl *FD);
+ llvm::Expected<const VarDecl *> importDefinition(const VarDecl *VD);
----------------
Same question as above.
================
Comment at: lib/CrossTU/CrossTranslationUnit.cpp:114
+bool HasDefinition(const FunctionDecl *D, const FunctionDecl *&DefD) {
+ return D->hasBody(DefD);
----------------
Functions should start with lowercase letter. Maybe these could be static?
================
Comment at: lib/CrossTU/CrossTranslationUnit.cpp:143
+CrossTranslationUnitContext::findDefInDeclContext(const DeclContext *DC,
+ StringRef LookupFnName) {
assert(DC && "Declaration Context must not be null");
----------------
Fn in the name refers to a function, maybe that could be changed as well.
================
Comment at: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:354
+ if (!VD->hasExternalStorage() ||
+ VD->getAnyInitializer() != nullptr)
+ return true;
----------------
Will this work for zero initialized globals (i.e. not having an initializer expression) that are defined in the current translation unit? It would be great to have a test case for that.
https://reviews.llvm.org/D46421
More information about the cfe-commits
mailing list