template_template_param.carbon 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. //
  5. // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon
  6. //
  7. // AUTOUPDATE
  8. // TIP: To test this file alone, run:
  9. // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/interop/cpp/template/template_template_param.carbon
  10. // TIP: To dump output, run:
  11. // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interop/cpp/template/template_template_param.carbon
  12. // --- templates.h
  13. template<typename> struct A {};
  14. template<typename> struct B {};
  15. template<template<typename> typename, template<typename> typename>
  16. struct TwoTemplates {};
  17. // --- fail_todo_valid.carbon
  18. library "[[@TEST_NAME]]";
  19. import Cpp library "templates.h";
  20. //@dump-sem-ir-begin
  21. // CHECK:STDERR: fail_todo_valid.carbon:[[@LINE+4]]:25: error: semantics TODO: `argument for template template parameter` [SemanticsTodo]
  22. // CHECK:STDERR: var x: Cpp.TwoTemplates(Cpp.A, Cpp.B);
  23. // CHECK:STDERR: ^~~~~
  24. // CHECK:STDERR:
  25. var x: Cpp.TwoTemplates(Cpp.A, Cpp.B);
  26. //@dump-sem-ir-end
  27. // --- fail_non_type_argument.carbon
  28. library "[[@TEST_NAME]]";
  29. import Cpp library "templates.h";
  30. // CHECK:STDERR: fail_non_type_argument.carbon:[[@LINE+4]]:25: error: semantics TODO: `argument for template template parameter` [SemanticsTodo]
  31. // CHECK:STDERR: var x: Cpp.TwoTemplates(Cpp.A, true);
  32. // CHECK:STDERR: ^~~~~
  33. // CHECK:STDERR:
  34. var x: Cpp.TwoTemplates(Cpp.A, true);
  35. // CHECK:STDOUT: --- fail_todo_valid.carbon
  36. // CHECK:STDOUT:
  37. // CHECK:STDOUT: constants {
  38. // CHECK:STDOUT: }
  39. // CHECK:STDOUT:
  40. // CHECK:STDOUT: imports {
  41. // CHECK:STDOUT: }
  42. // CHECK:STDOUT:
  43. // CHECK:STDOUT: file {
  44. // CHECK:STDOUT: name_binding_decl {
  45. // CHECK:STDOUT: %x.patt: <error> = ref_binding_pattern x [concrete]
  46. // CHECK:STDOUT: %x.var_patt: <error> = var_pattern %x.patt [concrete]
  47. // CHECK:STDOUT: }
  48. // CHECK:STDOUT: %x.var: ref <error> = var %x.var_patt [concrete = <error>]
  49. // CHECK:STDOUT: %x: ref <error> = ref_binding x, <error> [concrete = <error>]
  50. // CHECK:STDOUT: }
  51. // CHECK:STDOUT: