Jamboree
Jamboree

Reputation: 5299

Does Clang/C2 use the same semantic analysis & AST as Clang/LLVM?

I think Clang/C2 uses the Clang frontend which contains semantic analysis & AST, and just replaced the LLVM codegen with C2. But strangely there's some inconsistency between Clang/C2 & Clang/LLVM.

For example, given the following program:

#include <iostream>

void f(int)
{
    std::cout << "int!\n";
}

template<class T>
void fun(T i)
{
    f(i);
}

void f(float)
{
    std::cout << "float!\n";
}

int main()
{
    fun(5.f);
    return 0;
}

The standard behavior is to select the int overload. G++ & Clang/LLVM give me the correct result. OTOH, MSVC is known to lack of 2-phrase lookup, so it selects the float overload. What strange is, Clang/C2, which should use Clang frontend and thus have 2-phrase lookup, also give me the same result as MSVC.

Is the normal semantic analysis & AST not used in Clang/C2, or does it mimic the MSVC on purpose here?

Upvotes: 1

Views: 961

Answers (1)

apardoe
apardoe

Reputation: 641

melak47 is correct. We've been working on getting the defaults fixed up for Clang/C2. Our intention is to turn off all of the MSVC compatibility options, but we're doing that incrementally. The Clang/C2 compiler uses the same Clang front end as Clang/LLVM and should (eventually) behave as Clang/LLVM behaves.

So to answer your question directly, yes Clang/C2 uses the same semantic analysis and AST as Clang/LLVM. We didn't modify Clang except to have it hook up to C2. (Small lie: we also have it generate debug information, but that's being pushed back to the Clang trunk.)

As for the other comment, Microsoft has no need to create a Clang that "bends to match what the MS compiler does". The Clang-cl project does that. See, for example, the last slide here: http://llvm.org/devmtg/2014-04/PDFs/Talks/clang-cl.pdf

Upvotes: 3

Related Questions