summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaelyn Takata <rikka@google.com>2014-12-02 23:32:20 +0000
committerKaelyn Takata <rikka@google.com>2014-12-02 23:32:20 +0000
commit999dd85e16a99e1e762a7cbd858065bf5bf9fd2f (patch)
tree8b32a30e40a5fb73b92efd155e6839e78308cd99
parent5450763dd89b8e70e9eeb0dc589ce622cd175928 (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/SemaCXX/default2.cpp6
-rw-r--r--clang/test/SemaCXX/typo-correction-delayed.cpp4
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;
OpenPOWER on IntegriCloud