r241811 - [CodeCompletion] Don't crash on member inits of templated constructors.

Reid Kleckner rnk at google.com
Thu Jul 9 09:14:30 PDT 2015


The new test fails for me on Windows:

Command 6: "D:/src/llvm/build/./bin\c-index-test.EXE"
"-code-completion-at=D:\src\llvm\tools\clang\test\Index\complete-ctor-inits.cpp:22:10"
"D:\src\llvm\tools\clang\test\Index\complete-ctor-inits.cpp"
Command 6 Result: 0
Command 6 Output:


Command 6 Stderr:
D:\src\llvm\tools\clang\test\Index\complete-ctor-inits.cpp:29:8: error:
expected '{'
Number FIX-ITs = 0


Command 7: "D:/src/llvm/build/./bin\FileCheck.EXE"
"-check-prefix=CHECK-CC4"
"D:\src\llvm\tools\clang\test\Index\complete-ctor-inits.cpp"
Command 7 Result: 1
Command 7 Output:


Command 7 Stderr:
D:\src\llvm\tools\clang\test\Index\complete-ctor-inits.cpp:55:15: error:
expected string not found in input
// CHECK-CC4: MemberRef:{TypedText a}{LeftParen (}{Placeholder
args}{RightParen )} (7)
              ^
<stdin>:1:1: note: scanning from here
Completion contexts:
^

On Thu, Jul 9, 2015 at 8:31 AM, Benjamin Kramer <benny.kra at googlemail.com>
wrote:

> Author: d0k
> Date: Thu Jul  9 10:31:10 2015
> New Revision: 241811
>
> URL: http://llvm.org/viewvc/llvm-project?rev=241811&view=rev
> Log:
> [CodeCompletion] Don't crash on member inits of templated constructors.
>
> Also fixes a crash (on invalid) member functions with a colon
> initializer. PR23948.
>
> Modified:
>     cfe/trunk/lib/Sema/SemaCodeComplete.cpp
>     cfe/trunk/test/Index/complete-ctor-inits.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=241811&r1=241810&r2=241811&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaCodeComplete.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp Thu Jul  9 10:31:10 2015
> @@ -4409,9 +4409,12 @@ void Sema::CodeCompleteOperatorName(Scop
>  void Sema::CodeCompleteConstructorInitializer(
>                                Decl *ConstructorD,
>                                ArrayRef <CXXCtorInitializer *>
> Initializers) {
> -  PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
> -  CXXConstructorDecl *Constructor
> -    = static_cast<CXXConstructorDecl *>(ConstructorD);
> +  if (!ConstructorD)
> +    return;
> +
> +  AdjustDeclIfTemplate(ConstructorD);
> +
> +  CXXConstructorDecl *Constructor =
> dyn_cast<CXXConstructorDecl>(ConstructorD);
>    if (!Constructor)
>      return;
>
> @@ -4435,6 +4438,7 @@ void Sema::CodeCompleteConstructorInitia
>    // Add completions for base classes.
>    CodeCompletionBuilder Builder(Results.getAllocator(),
>                                  Results.getCodeCompletionTUInfo());
> +  PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
>    bool SawLastInitializer = Initializers.empty();
>    CXXRecordDecl *ClassDecl = Constructor->getParent();
>    for (const auto &Base : ClassDecl->bases()) {
>
> Modified: cfe/trunk/test/Index/complete-ctor-inits.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-ctor-inits.cpp?rev=241811&r1=241810&r2=241811&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Index/complete-ctor-inits.cpp (original)
> +++ cfe/trunk/test/Index/complete-ctor-inits.cpp Thu Jul  9 10:31:10 2015
> @@ -17,6 +17,18 @@ struct Z : public X<int>, public Y {
>
>  Z::Z() : ::X<int>(0), Virt(), b(), c() { }
>
> +struct PR23948 {
> +  template<class size> PR23948()
> +        :
> +  {}
> +
> +  template<class size> void invalid()
> +        :
> +  {}
> +
> +  int a;
> +};
> +
>  // RUN: c-index-test -code-completion-at=%s:18:10 %s | FileCheck
> -check-prefix=CHECK-CC1 %s
>  // CHECK-CC1: MemberRef:{TypedText a}{LeftParen (}{Placeholder
> args}{RightParen )} (35)
>  // CHECK-CC1: MemberRef:{TypedText b}{LeftParen (}{Placeholder
> args}{RightParen )} (35)
> @@ -38,3 +50,7 @@ Z::Z() : ::X<int>(0), Virt(), b(), c() {
>  // CHECK-CC3: MemberRef:{TypedText c}{LeftParen (}{Placeholder
> args}{RightParen )} (7)
>  // CHECK-CC3-NOT: NotImplemented:{TypedText Virt}{LeftParen
> (}{Placeholder args}{RightParen )}
>  // CHECK-CC3: NotImplemented:{TypedText Y}{LeftParen (}{Placeholder
> args}{RightParen )} (35)
> +
> +// RUN: c-index-test -code-completion-at=%s:22:10 %s | FileCheck
> -check-prefix=CHECK-CC4 %s
> +// CHECK-CC4: MemberRef:{TypedText a}{LeftParen (}{Placeholder
> args}{RightParen )} (7)
> +// RUN: c-index-test -code-completion-at=%s:26:10 %s
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150709/1a241aa2/attachment.html>


More information about the cfe-commits mailing list