r203525 - Add a unittest for the ExternalASTSource.

David Blaikie dblaikie at gmail.com
Mon Mar 10 23:56:07 PDT 2014


On Mon, Mar 10, 2014 at 6:18 PM, Richard Smith
<richard-llvm at metafoo.co.uk> wrote:
> Author: rsmith
> Date: Mon Mar 10 20:18:47 2014
> New Revision: 203525
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203525&view=rev
> Log:
> Add a unittest for the ExternalASTSource.
>
> Added:
>     cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp
> Modified:
>     cfe/trunk/unittests/AST/CMakeLists.txt
>
> Modified: cfe/trunk/unittests/AST/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/CMakeLists.txt?rev=203525&r1=203524&r2=203525&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/AST/CMakeLists.txt (original)
> +++ cfe/trunk/unittests/AST/CMakeLists.txt Mon Mar 10 20:18:47 2014
> @@ -10,6 +10,7 @@ add_clang_unittest(ASTTests
>    CommentParser.cpp
>    DeclPrinterTest.cpp
>    DeclTest.cpp
> +  ExternalASTSourceTest.cpp
>    SourceLocationTest.cpp
>    StmtPrinterTest.cpp
>    )
>
> Added: cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp?rev=203525&view=auto
> ==============================================================================
> --- cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp (added)
> +++ cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp Mon Mar 10 20:18:47 2014
> @@ -0,0 +1,83 @@
> +//===- unittest/AST/ExternalASTSourceTest.cpp -----------------------------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This file contains tests for Clang's ExternalASTSource.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "clang/AST/ASTConsumer.h"
> +#include "clang/AST/ASTContext.h"
> +#include "clang/AST/ExternalASTSource.h"
> +#include "clang/Frontend/CompilerInstance.h"
> +#include "clang/Frontend/CompilerInvocation.h"
> +#include "clang/Frontend/FrontendActions.h"
> +#include "gtest/gtest.h"
> +
> +using namespace clang;
> +using namespace llvm;
> +
> +
> +class TestFrontendAction : public ASTFrontendAction {
> +public:
> +  TestFrontendAction(ExternalASTSource *Source) : Source(Source) {}
> +
> +private:
> +  virtual void ExecuteAction() {
> +    getCompilerInstance().getASTContext().setExternalSource(Source);
> +    getCompilerInstance().getASTContext().getTranslationUnitDecl()
> +        ->setHasExternalVisibleStorage();
> +    return ASTFrontendAction::ExecuteAction();
> +  }
> +
> +  virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
> +                                         StringRef InFile) {
> +    return new ASTConsumer;
> +  }
> +
> +  IntrusiveRefCntPtr<ExternalASTSource> Source;
> +};
> +
> +bool testExternalASTSource(ExternalASTSource *Source,
> +                           StringRef FileContents) {
> +  CompilerInstance Compiler;
> +  Compiler.createDiagnostics();
> +
> +  CompilerInvocation *Invocation = new CompilerInvocation;
> +  Invocation->getPreprocessorOpts().addRemappedFile(
> +    "test.cc", MemoryBuffer::getMemBuffer(FileContents));
> +  const char *Args[] = { "test.cc" };
> +  CompilerInvocation::CreateFromArgs(*Invocation, Args,
> +                                     Args + array_lengthof(Args),
> +                                     Compiler.getDiagnostics());
> +  Compiler.setInvocation(Invocation);
> +
> +  TestFrontendAction Action(Source);
> +  return Compiler.ExecuteAction(Action);
> +}
> +
> +
> +// Ensure that a failed name lookup into an external source only occurs once.
> +TEST(ExternalASTSourceTest, FailedLookupOccursOnce) {
> +  struct TestSource : ExternalASTSource {
> +    TestSource(unsigned &Calls) : Calls(Calls) {}
> +
> +    bool FindExternalVisibleDeclsByName(const DeclContext*,
> +                                        DeclarationName Name) {
> +      if (Name.getAsString() == "j")
> +        ++Calls;
> +      return false;
> +    }
> +
> +    unsigned &Calls;
> +  };
> +
> +  unsigned Calls;

Use of uninitialized variable, Calls, fixed in r203545.

> +  ASSERT_TRUE(testExternalASTSource(new TestSource(Calls), "int j, k = j;"));
> +  EXPECT_EQ(1u, Calls);
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list