<div dir="ltr">I have a set of global variable and member functions annotations in my code.<div><br></div><div>//test1.cpp</div><div><div>#define ANNOT1 __attribute__((annotate("annot1"))) </div><div>#define ANNOT2 __attribute__((annotate("annot2"))) </div><div><br></div><div>ANNOT1 int a;</div><div>ANNOT1 int b;</div><div><br></div><div><br></div><div>class A {</div><div><br></div><div> public:</div><div>    </div><div>    ANNOT2</div><div>    void hook() {</div><div>        //does nothing;</div><div>    }</div><div><br></div><div>   void dummy() { </div><div>        a = 0;</div><div>   }</div><div>    </div><div>};</div><div><br></div><div><br></div><div>int main() {</div><div>  </div><div>        A ob;</div><div>        ob.dummy();</div><div>  </div><div>} </div></div><div><br></div><div>//test1.ll</div><div><div>; ModuleID = 'test1.cpp'</div><div>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"</div><div>target triple = "x86_64-pc-linux-gnu"</div><div><br></div><div>%class.A = type { i8 }</div><div><br></div><div>@a = global i32 0, align 4</div><div>@.str = private unnamed_addr constant [7 x i8] c"annot1\00", section "llvm.metadata"</div><div>@.str1 = private unnamed_addr constant [10 x i8] c"test1.cpp\00", section "llvm.metadata"</div><div>@b = global i32 0, align 4</div><div><font color="#ff00ff">@llvm.global.annotations</font> = appending global [2 x { i8*, i8*, i8*, i32 }] [{ i8*, i8*, i8*, i32 } {<font color="#ff00ff"> i8* bitcast (i32* @a to i8*)</font>, i8* getelementptr inbounds ([7 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8]* @.str1, i32 0, i32 0), i32 4 }, { i8*, i8*, i8*, i32 } { i<font color="#ff00ff">8* bitcast (i32* @b to i8*), i8*</font> getelementptr inbounds ([7 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8]* @.str1, i32 0, i32 0), i32 5 }], section "llvm.metadata"</div><div><br></div><div>; Function Attrs: uwtable</div><div>define i32 @main() #0 {</div><div>  %ob = alloca %class.A, align 1</div><div>  call void @_ZN1A5dummyEv(%class.A* %ob)</div><div>  ret i32 0</div><div>}</div><div><br></div><div>; Function Attrs: nounwind uwtable</div><div>define linkonce_odr void @_ZN1A5dummyEv(%class.A* %this) #1 align 2 {</div><div>  %1 = alloca %class.A*, align 8</div><div>  store %class.A* %this, %class.A** %1, align 8</div><div>  %2 = load %class.A** %1</div><div>  store i32 0, i32* @a, align 4</div><div>  ret void</div><div>}</div><div><br></div><div>attributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }</div><div>attributes #1 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }</div><div><br></div><div>!llvm.ident = !{!0}</div><div><br></div><div>!0 = !{!"Ubuntu clang version 3.6.0-2ubuntu1~trusty1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)"}</div></div><div><br></div><div><br></div><div>Out of @a and @b, only @a is used. But in @llvm.global.annotations, both of them appear.</div><div>But in case of member function annotations, void A::hook() has completely disappeared from the IR. Because, member function is not called.</div><div><br></div><div>Can someone explain me why is this so different ?</div><div>I need void A::hook()  to be available in IR. Is it possible or any other better solution ?</div><div><br></div></div>