summaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorMomchil Velikov <momchil.velikov@arm.com>2021-05-24 21:40:47 +0100
committerMomchil Velikov <momchil.velikov@arm.com>2021-05-24 22:04:15 +0100
commit13dd65b3a1a3ac049b5f3a9712059f7c61649bea (patch)
treec262727ad16865ecfadabdad424b8b1f0764be8a /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parent4c0b0de904a5622c33e3ed97e86c6792fbc13feb (diff)
Do not create LLVM IR `constant`s for objects with dynamic initialisation
When a const-qualified object has a section attribute, that section is set to read-only and clang outputs a LLVM IR constant for that object. This is incorrect for dynamically initialised objects. For example: int init() { return 15; } __attribute__((section("SA"))) const int a = init(); a is allocated to a read-only section and is left unintialised (zero-initialised). This patch adds checks if an initialiser is a constant expression and allocates objects to sections as follows: * const-qualified objects - no initialiser or constant initialiser: .rodata - dynamic initializer: .bss * non const-qualified objects - no initialiser or dynamic initialiser: .bss - constant initialiser: .data (".rodata", ".data", and ".bss" names used just for explanatory purpose) Differential Revision: https://reviews.llvm.org/D102693
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
0 files changed, 0 insertions, 0 deletions