diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2014-05-11 00:28:16 +0000 | 
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2014-05-11 00:28:16 +0000 | 
| commit | 7aeab6022f9d14fa94c812fab3d119b0bbdbf71e (patch) | |
| tree | a4708df2b09c570441b8a942db4dc04cd8318e95 | |
| parent | 3fddae75c72705d69e7eca26fb2e37cf7c06b6ca (diff) | |
| download | bcm5719-llvm-7aeab6022f9d14fa94c812fab3d119b0bbdbf71e.tar.gz bcm5719-llvm-7aeab6022f9d14fa94c812fab3d119b0bbdbf71e.zip  | |
Follow-up to r208481: Free all default arguments, not just the first one.
Also add test coverage for this case.  Found by Richard Smith!
llvm-svn: 208484
| -rw-r--r-- | clang/include/clang/Sema/DeclSpec.h | 6 | ||||
| -rw-r--r-- | clang/test/SemaCXX/conversion-function.cpp | 2 | 
2 files changed, 4 insertions, 4 deletions
diff --git a/clang/include/clang/Sema/DeclSpec.h b/clang/include/clang/Sema/DeclSpec.h index 493f68708a4..99941b2e326 100644 --- a/clang/include/clang/Sema/DeclSpec.h +++ b/clang/include/clang/Sema/DeclSpec.h @@ -1231,9 +1231,9 @@ struct DeclaratorChunk {      ///      /// This is used in various places for error recovery.      void freeParams() { -      if (Params) { -        delete Params->DefaultArgTokens; -        Params->DefaultArgTokens = nullptr; +      for (unsigned I = 0; I < NumParams; ++I) { +        delete Params[I].DefaultArgTokens; +        Params[I].DefaultArgTokens = nullptr;        }        if (DeleteParams) {          delete[] Params; diff --git a/clang/test/SemaCXX/conversion-function.cpp b/clang/test/SemaCXX/conversion-function.cpp index dcc0609b587..40ac33b8eb0 100644 --- a/clang/test/SemaCXX/conversion-function.cpp +++ b/clang/test/SemaCXX/conversion-function.cpp @@ -27,7 +27,7 @@ public:    void operator bool(int, ...) const; // expected-error{{conversion function cannot have a return type}} \    // expected-error{{conversion function cannot have any parameters}} -  operator bool(int a = 4) const; // expected-error{{conversion function cannot have any parameters}} +  operator bool(int a = 4, int b = 6) const; // expected-error{{conversion function cannot have any parameters}}    operator float(...) const;  // expected-error{{conversion function cannot be variadic}}  | 

