About Clang Test

Hi everyone!
I’m trying to write a translator to translate LLVM IR to another IR(named ‘X’). That’s to say I use the result of Clang but do not use LLVM Backend. You can think I use Clang + Another IR(‘X’) + Another Backend(Can recognize ‘X’). Here, I want to know where is the test of Clang?

First of all, I want to list the information I have known so far.

  1. clang-test repository in the LLVM
    The standalone repository I found yesterday. I found many test files in this folder but I didn’t know whether it is the all test files of Clang, because I found that these are mainly from gcc test suite, especially I didn’t know whether it contained C++11, C++1y test cases or not.

  2. tests in the Clang repository
    In the Clang repository, there is also one tests folder which has ‘SemaCXX’, ‘SemaTemplate’ and so on. But I find that it is tested by verify files. I think I need the running result(Because I use Clang, if I compile it, it can compile perfectly). For example:

// a.cc

int func() {
int a = 1;
int b = 3;
return a + b;
}
int main() {
std::cout << func();
return 0;
}
if I run a.cc, the result will be 4. if I can have one ‘expected_result’ file, I can know whether it is the correct result or not.

The problem is that I do not whether Clang has this kind test suite, i.e. one test file(such as a.cc), one expected result file(such as a.expected).

Thanks

The clang repository itself does not contain such end-to-end tests (we
prefer to test that correct diagnostics or IR are generated for our
pre-checkin unit tests), but we have some in the test-suite
repository, see:

http://llvm.org/svn/llvm-project/test-suite/
http://llvm.org/docs/TestingGuide.html#test-suite

if I run a.cc, the result will be 4. if I can have one 'expected_result'
file, I can know whether it is the correct result or not.

The problem is that I do not whether Clang has this kind test suite, i.e.
one test file(such as a.cc), one expected result file(such as a.expected).

We've got a set of tests like this at
http://llvm.org/git/test-suite.git (generally referred to as the
test-suite, for obvious reasons, in documentation).

I think it's fair to say that the majority of Clang tests are what you
see in the source directory though:

  + Driver tests, checking that clang can target particular
environments & find the right headers given user-level options
(test/Driver & some others).
  + Various front-end tests that don't care about even LLVM IR but
want to make sure Clang's internal representation is correct
(test/Sema, test/AST, ...).
  + Clang CodeGen tests that check correct LLVM IR is produced.

Tests for the second phase of CodeGen (LLVM IR -> assembly) live in
the LLVM repository, mostly under test/CodeGen.

There are some Clang tests that look at actual assembly, but it's
considered bad form. There are absolutely no clang runtime tests
(there are a few JIT tests in LLVM, but they're IR -> execute and it's
often a little unclear just what they test).

Cheers.

Tim.

Richard Smith,Thanks.
But in my opinion, the compiler should have such test for running behavior for stronger, more careful test, especially some code has running behavior(such as virtual function, exception and so on). So, if clang doesn’t have this end-to-end test, how about LLVM?

Best Regards

Wu Zhao

No, there are no end-to-end execution tests that live in the clang or LLVM repositories and are expected to run before check-in. The IR FileCheck tests give us enough faith that everything is working properly.

Fortunately, it is very easy to self-host clang or build any other software you have access to and run its tests.

Got it. Thanks everyone. :slight_smile:

Best Regards

Wu Zhao