jkorous-apple added inline comments.
================ Comment at: Parse/ParseTemplate.cpp:492 + // Is there just a typo in the input code? ('typedef' instead of 'typename') + if (Tok.is(tok::kw_typedef)) { + Diag(Tok.getLocation(), diag::err_expected_template_parameter); ---------------- vsapsai wrote: > How does it work when you have `typedef` for the first template parameter? It works all right but I am puzzled by your question now :-) ``` /Users/jankorous/src/oss/llvm/llvm/tools/clang/test/Parser/typedef-instead-of-typename-typo.hpp:3:11: error: expected template parameter template <typedef A, typename B> struct Foo { ^ /Users/jankorous/src/oss/llvm/llvm/tools/clang/test/Parser/typedef-instead-of-typename-typo.hpp:3:11: note: Did you mean to use 'typename'? template <typedef A, typename B> struct Foo { ^~~~~~~ typename fix-it:"/Users/jankorous/src/oss/llvm/llvm/tools/clang/test/Parser/typedef-instead-of-typename-typo.hpp":{3:11-3:18}:"typename" /Users/jankorous/src/oss/llvm/llvm/tools/clang/test/Parser/typedef-instead-of-typename-typo.hpp:4:3: error: unknown type name 'a' a ^ ``` I am probably not following you here. Do you have any specific reason on your mind? Anything I should think about or check in the source code? ================ Comment at: Parser/typedef-instead-of-typename-typo.hpp:3 + +template <typename A, typedef B> struct Foo { + a ---------------- vsapsai wrote: > Maybe put this test in clang/test/FixIt ? > > Also please check what file extensions are used for testing templates. .hpp > reflects real-life usage but most tests are .cpp. Or maybe I wasn't paying > attention. Oh, I completely missed that directory! Thanks. It seems like there are some header files with ".h" extension but these are usually somehow special (empty file or something) so I figure you are right and the extension should be ".cpp". ================ Comment at: Parser/typedef-instead-of-typename-typo.hpp:5 + a +}; // CHECK: expected-error{{expected template parameter}} \ +// CHECK: expected-note{{Did you mean to use 'typename'?}} \ ---------------- vsapsai wrote: > It is a little bit confusing to what lines the messages would be attributed > to. Need to check locally because not sure I interpret all those backslashes > the same way lit does. > > Also idea for the test. To check that the fix-it was applied properly you can > add a member like `B b;` and it shouldn't trigger any errors. I am totally open to suggestions how to write better tests using FileCheck. As far as I understand it I have to keep the expected-* macro on the same line as the code. Or is there any better way? Do I understand it right that you suggest to create another test in which to try applying fixit and check that compilation was successful? Do you mean to create compile_commands.json temporarily and use clang-check -fixit? ================ Comment at: clang/Basic/DiagnosticParseKinds.td:1167 +def note_meant_to_use_typename : Note< + "Did you mean to use 'typename'?">; } ---------------- vsapsai wrote: > Looks like other diagnostic messages "did you mean to use …" have lowercase > "d" in "did". Though I haven't checked how it looks in various situations. You are right. Thanks. https://reviews.llvm.org/D42170 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits