[LLVMbugs] [Bug 3073] New: Sema::DiagnoseAssignmentResult has broken message logic
    bugzilla-daemon at cs.uiuc.edu 
    bugzilla-daemon at cs.uiuc.edu
       
    Sat Nov 15 11:17:34 PST 2008
    
    
  
http://llvm.org/bugs/show_bug.cgi?id=3073
           Summary: Sema::DiagnoseAssignmentResult has broken message logic
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Semantic Analyzer
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: sebastian.redl at getdesigned.at
                CC: llvmbugs at cs.uiuc.edu
Sema::DiagnoseAssignmentResult selects an error message and then passes three
arguments to it, in this order:
1) The destination type.
2) The source type.
3) The "kind", e.g. "initializing".
However, the selected error messages aren't all compatible with this scheme.
err_typecheck_convert_incompatible, for example, was originally written to be
passed the name of the variable being initialized as the second argument and
reads thus:
"incompatible type %2 '%1', expected '%0'"
For the following code:
struct S {};
void f()
{
  int i = *(S*)0;
}
this leads to the highly misleading message:
"error: incompatible type initializing 'struct S', expected 'int'"
As a user, I can only wonder why Clang thinks that I want to initialize 'struct
S'.
Unfortunately, the error message is used in other places, too, so it cannot
simply be adapted. The broken part here is, in my opinion, that
DiagnoseAssignmentResult and the call paths leading to it do not preserve the
InitEntity parameter that functions like CheckInitializerTypes have.
-- 
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