1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - %s | FileCheck %s 2f552c20b3dd21855054010e29882e563fdcccff6Douglas Gregor 3f552c20b3dd21855054010e29882e563fdcccff6Douglas Gregor// <rdar://problem/8684363>: clang++ not respecting __attribute__((used)) on destructors 4f552c20b3dd21855054010e29882e563fdcccff6Douglas Gregorstruct X0 { 541f1fd40a962c2abea0324f05dffaad4e770d84dEli Friedman // CHECK: define linkonce_odr {{.*}} @_ZN2X0C1Ev 6f552c20b3dd21855054010e29882e563fdcccff6Douglas Gregor __attribute__((used)) X0() {} 741f1fd40a962c2abea0324f05dffaad4e770d84dEli Friedman // CHECK: define linkonce_odr {{.*}} @_ZN2X0D1Ev 8f552c20b3dd21855054010e29882e563fdcccff6Douglas Gregor __attribute__((used)) ~X0() {} 9f552c20b3dd21855054010e29882e563fdcccff6Douglas Gregor}; 106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// PR19743: not emitting __attribute__((used)) inline methods in nested classes. 126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct X1 { 136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct Nested { 146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: define linkonce_odr {{.*}} @_ZN2X16Nested1fEv 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void __attribute__((used)) f() {} 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}; 18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 19ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesstruct X2 { 20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // We must delay emission of bar() until foo() has had its body parsed, 21ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // otherwise foo() would not be emitted. 22ef8225444452a1486bd721f3285301fe84643b00Stephen Hines void __attribute__((used)) bar() { foo(); } 23ef8225444452a1486bd721f3285301fe84643b00Stephen Hines void foo() { } 24ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 25ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // CHECK: define linkonce_odr {{.*}} @_ZN2X23barEv 26ef8225444452a1486bd721f3285301fe84643b00Stephen Hines // CHECK: define linkonce_odr {{.*}} @_ZN2X23fooEv 27ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 28