// REQUIRED_ARGS: -d
// https://issues.dlang.org/show_bug.cgi?id=17419

extern (C) int fooc();
alias aliasc = fooc;

static assert(__traits(getLinkage, fooc) == "C");
static assert(__traits(getLinkage, aliasc) == "C");

extern (D) int food();
extern (C++) int foocpp();
extern (Windows) int foow();
extern (Objective-C) int fooobjc();
extern (System) int foos();

static assert(__traits(getLinkage, food) == "D");
static assert(__traits(getLinkage, foocpp) == "C++");
static assert(__traits(getLinkage, foow) == "Windows");
static assert(__traits(getLinkage, fooobjc) == "Objective-C");
static assert(__traits(getLinkage, foos) == "System");

extern (C) int global;
static assert(__traits(getLinkage, global) == "C");

static assert(__traits(getLinkage, typeof(fooc)) == "C");
static assert(__traits(getLinkage, typeof(&fooc)) == "C");

void bar()
{
    void nested() { }
    static assert(__traits(getLinkage, typeof(&nested)) == "D");
}

class FooD {}
interface FooDInterface {}
extern (C++) class FooCpp {}
extern (C++) struct FooCppStruct {}
extern (C++) interface FooCppInterface {}

static assert(__traits(getLinkage, FooD) == "D");
static assert(__traits(getLinkage, FooDInterface) == "D");
static assert(__traits(getLinkage, FooCpp) == "C++");
static assert(__traits(getLinkage, FooCppStruct) == "C++");
static assert(__traits(getLinkage, FooCppInterface) == "C++");

version (D_ObjectiveC)
{
    extern (Objective-C) interface FooObjC {}
    static assert(__traits(getLinkage, FooObjC) == "Objective-C");
}
