| // RUN: %clang_cc1 -w -emit-llvm %s -O1 -o - | FileCheck %s |
| // This used to "check for bug compatibility with gcc". |
| // Now it checks that that the "weak" declaration makes the value |
| // fully interposable whereas a "selectany" one is handled as constant |
| // and propagated. |
| |
| // CHECK: @x = weak {{.*}}constant i32 123 |
| const int x __attribute((weak)) = 123; |
| |
| // CHECK: @y = weak_odr {{.*}}constant i32 234 |
| const int y __attribute((selectany)) = 234; |
| |
| int* f(void) { |
| return &x; |
| } |
| |
| int g(void) { |
| // CHECK: load i32, ptr @x |
| // CHECK-NOT: ret i32 123 |
| return *f(); |
| } |
| |
| int *k(void) { |
| return &y; |
| } |
| |
| int l(void) { |
| // CHECK-NOT: load i32, ptr @y |
| // CHECK: ret i32 234 |
| return *k(); |
| } |