Open llvmbot opened 10 years ago
Currently, the clang static analyzer does not have cross implementation file analysis, so there is not enough infrastructure to implement this effectively.
Check out the initialization order checking with Address Sanitizer and see if that is something you might be able to use instead: http://clang.llvm.org/docs/AddressSanitizer.html
For more info, use cfe-dev mailing list.
assigned to @tkremenek
Extended Description
Example:
header.h:
extern int a; extern int b;
a.cpp:
include "header.h"
int a = 2;
b.cpp:
include "header.h"
int b = a;
main.cpp:
include
include "header.h"
attribute((constructor)) static void init() { printf("init: %i %i\n", a, b); }
int main() {}
a and b will both get the same init_priority (I think it's DEFAULT_INIT_PRIORITY = 65535), and thus it's not well defined whether a or b is initialized first.
I would like to have a check, if the initialization of a global/static variable depends on another global/static variable (int b = a), its init_priority must be a bigger value than of all its dependencies.
In case that you wont implement this feature in the (near) future, maybe you can give some guidance about what I need to do to implement such a static check myself.