llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.6k stars 11.82k forks source link

Check undefined init_priority static object dependency #20440

Open llvmbot opened 10 years ago

llvmbot commented 10 years ago
Bugzilla Link 20066
Version unspecified
OS All
Reporter LLVM Bugzilla Contributor
CC @AnnaZaks

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.

0f73b9cf-134f-41af-a8b1-14d9f305ee95 commented 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.

llvmbot commented 10 years ago

assigned to @tkremenek