summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2014-05-11 00:28:16 +0000
committerNico Weber <nicolasweber@gmx.de>2014-05-11 00:28:16 +0000
commit7aeab6022f9d14fa94c812fab3d119b0bbdbf71e (patch)
treea4708df2b09c570441b8a942db4dc04cd8318e95
parent3fddae75c72705d69e7eca26fb2e37cf7c06b6ca (diff)
downloadbcm5719-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.h6
-rw-r--r--clang/test/SemaCXX/conversion-function.cpp2
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}}
OpenPOWER on IntegriCloud