[LLVMbugs] [Bug 8119] New: missing typename in function prototype is parsed as variable declaration

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Sep 8 17:43:37 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=8119

           Summary: missing typename in function prototype is parsed as
                    variable declaration
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: nlewycky at google.com
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


This code snippet is invalid and is rejected by both gcc and clang:

  template <typename A>
  class Map {
   public:
    class Iterator {
    };
  };

  template <typename S>
  void f1(Map<S>::Iterator v) {
  }

but what's wrong? Let's ask clang:

  test.cc:9:6: error: variable 'f1' declared as a template
  void f1(Map<S>::Iterator v) {
       ^
  test.cc:9:27: error: expected ')'
  void f1(Map<S>::Iterator v) {
                           ^
  test.cc:9:8: note: to match this '('
  void f1(Map<S>::Iterator v) {
         ^
  test.cc:9:29: error: expected ';' at end of declaration
  void f1(Map<S>::Iterator v) {
                             ^
                             ;
  test.cc:9:30: error: expected unqualified-id
  void f1(Map<S>::Iterator v) {
                              ^
  4 errors generated.

This is a terrible diagnostic. It sounds like things go wrong when clang
decides that f1 is a variable instead of a function. The desired diagnostic is
the fixit that says where to insert 'typename' before Map.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list