1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - %s | FileCheck %s
20b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
3516a6bc399f1f4595423e80c9d4bc687f870acd1Douglas Gregorstruct Global { Global(); };
415e310a3b970b64a84cb30f0005bc396b4d978cbJohn McCalltemplate<typename T> struct X { X() {} };
50b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
60b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
70b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregornamespace {
815e310a3b970b64a84cb30f0005bc396b4d978cbJohn McCall  struct Anon { Anon() {} };
90b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
100b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor  // CHECK: @_ZN12_GLOBAL__N_15anon0E = internal global
110b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor  Global anon0;
120b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor}
130b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
140b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor// CHECK: @anon1 = internal global
150b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas GregorAnon anon1;
160b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
170b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor// CHECK: @anon2 = internal global
180b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas GregorX<Anon> anon2;
190b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor
202bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian// rdar: // 8071804
212bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianchar const * const xyzzy = "Hello, world!";
222bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianextern char const * const xyzzy;
232bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
242bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianchar const * const *test1()
252bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian{
262bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian   // CHECK: @_ZL5xyzzy = internal constant
272bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    return &xyzzy;
282bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian}
292bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
302bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianstatic char const * const static_xyzzy = "Hello, world!";
312bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianextern char const * const static_xyzzy;
322bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
332bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianchar const * const *test2()
342bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian{
352bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    // CHECK: @_ZL12static_xyzzy = internal constant
362bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    return &static_xyzzy;
372bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian}
382bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
392bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianstatic char const * static_nonconst_xyzzy = "Hello, world!";
402bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianextern char const * static_nonconst_xyzzy;
412bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
422bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianchar const * *test3()
432bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian{
442bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    // CHECK: @_ZL21static_nonconst_xyzzy = internal global
452bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    return &static_nonconst_xyzzy;
462bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian}
472bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
482bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
492bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianchar const * extern_nonconst_xyzzy = "Hello, world!";
502bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianextern char const * extern_nonconst_xyzzy;
512bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian
522bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanianchar const * *test4()
532bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian{
542bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    // CHECK: @extern_nonconst_xyzzy = global
552bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian    return &extern_nonconst_xyzzy;
562bf6d7b1f7406ca4dfe841d4f6ef4b91dce195e4Fariborz Jahanian}
57cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedman
58cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedman// PR10120
59cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedmantemplate <typename T> class klass {
60cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedman    virtual void f();
61cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedman};
62cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedmannamespace { struct S; }
63cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedmanvoid foo () { klass<S> x; }
64cb5d2d0647fdab2e36c85b417e03bf18916ce10cEli Friedman// CHECK: @_ZTV5klassIN12_GLOBAL__N_11SEE = internal unnamed_addr constant
65