diff options
author | Kaelyn Takata <rikka@google.com> | 2014-12-02 23:32:20 +0000 |
---|---|---|
committer | Kaelyn Takata <rikka@google.com> | 2014-12-02 23:32:20 +0000 |
commit | 999dd85e16a99e1e762a7cbd858065bf5bf9fd2f (patch) | |
tree | 8b32a30e40a5fb73b92efd155e6839e78308cd99 | |
parent | 5450763dd89b8e70e9eeb0dc589ce622cd175928 (diff) | |
download | bcm5719-llvm-999dd85e16a99e1e762a7cbd858065bf5bf9fd2f.tar.gz bcm5719-llvm-999dd85e16a99e1e762a7cbd858065bf5bf9fd2f.zip |
Ensure typos in the default values of template parameters get diagnosed.
llvm-svn: 223177
-rw-r--r-- | clang/lib/Parse/ParseTemplate.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/default2.cpp | 6 | ||||
-rw-r--r-- | clang/test/SemaCXX/typo-correction-delayed.cpp | 4 |
3 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp index 2f1c189c1a7..ba1f98515ed 100644 --- a/clang/lib/Parse/ParseTemplate.cpp +++ b/clang/lib/Parse/ParseTemplate.cpp @@ -676,7 +676,7 @@ Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) { GreaterThanIsOperatorScope G(GreaterThanIsOperator, false); EnterExpressionEvaluationContext Unevaluated(Actions, Sema::Unevaluated); - DefaultArg = ParseAssignmentExpression(); + DefaultArg = Actions.CorrectDelayedTyposInExpr(ParseAssignmentExpression()); if (DefaultArg.isInvalid()) SkipUntil(tok::comma, tok::greater, StopAtSemi | StopBeforeMatch); } diff --git a/clang/test/SemaCXX/default2.cpp b/clang/test/SemaCXX/default2.cpp index 16260449d4b..c4d40b4280e 100644 --- a/clang/test/SemaCXX/default2.cpp +++ b/clang/test/SemaCXX/default2.cpp @@ -122,3 +122,9 @@ class XX { void A(int length = -1 ) { } void B() { A(); } }; + +template <int I = (1 * I)> struct S {}; // expected-error-re {{use of undeclared identifier 'I'{{$}}}} +S<1> s; + +template <int I1 = I2, int I2 = 1> struct T {}; // expected-error-re {{use of undeclared identifier 'I2'{{$}}}} +T<0, 1> t; diff --git a/clang/test/SemaCXX/typo-correction-delayed.cpp b/clang/test/SemaCXX/typo-correction-delayed.cpp index bff1d7633fc..7bf925816d3 100644 --- a/clang/test/SemaCXX/typo-correction-delayed.cpp +++ b/clang/test/SemaCXX/typo-correction-delayed.cpp @@ -102,3 +102,7 @@ void f(int *i) { __atomic_load(i, i, something_something); // expected-error-re {{use of undeclared identifier 'something_something'{{$}}}} } } + +const int DefaultArg = 9; // expected-note {{'DefaultArg' declared here}} +template <int I = defaultArg> struct S {}; // expected-error {{use of undeclared identifier 'defaultArg'; did you mean 'DefaultArg'?}} +S<1> s; |