[cfe-commits] r83217 - in /cfe/trunk: lib/Sema/SemaOverload.cpp test/CodeGenCXX/PR5086-ambig-resolution-enum.cpp

Fariborz Jahanian fjahanian at apple.com
Mon Oct 5 17:13:41 PDT 2009


On Oct 5, 2009, at 4:21 PM, Douglas Gregor wrote:

>
> On Oct 1, 2009, at 3:10 PM, Fariborz Jahanian wrote:
>
>> Author: fjahanian
>> Date: Thu Oct  1 17:10:15 2009
>> New Revision: 83217
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=83217&view=rev
>> Log:
>> enumerator value of 0 is not a null pointer constant for
>> deciding const of null pointer conversion. Fixes PR5086.
>>
>> Added:
>>   cfe/trunk/test/CodeGenCXX/PR5086-ambig-resolution-enum.cpp
>> Modified:
>>   cfe/trunk/lib/Sema/SemaOverload.cpp
>>
>> Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=83217&r1=83216&r2=83217&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaOverload.cpp Thu Oct  1 17:10:15 2009
>> @@ -887,6 +887,9 @@
>>      Expr->getType()->isIntegralType())
>>    return !InOverloadResolution;
>>
>> +  if (Expr->getType()->isEnumeralType())
>> +    return !InOverloadResolution;
>> +
>>  return Expr->isNullPointerConstant(Context,
>>                    InOverloadResolution?  
>> Expr::NPC_ValueDependentIsNotNull
>>                                        :  
>> Expr::NPC_ValueDependentIsNull);
>
> I don't think this is the right fix. We should change  
> Expr::isNullPointerConstant to meet the C++ rules when in C++ mode,  
> not change overload resolution itself.
>
>> Added: cfe/trunk/test/CodeGenCXX/PR5086-ambig-resolution-enum.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/PR5086-ambig-resolution-enum.cpp?rev=83217&view=auto
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- cfe/trunk/test/CodeGenCXX/PR5086-ambig-resolution-enum.cpp  
>> (added)
>> +++ cfe/trunk/test/CodeGenCXX/PR5086-ambig-resolution-enum.cpp Thu  
>> Oct  1 17:10:15 2009
>> @@ -0,0 +1,21 @@
>> +// RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -S %s -o  
>> %t-64.s &&
>> +// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s &&
>> +// RUN: clang-cc -triple i386-apple-darwin -std=c++0x -S %s -o  
>> %t-32.s &&
>> +// RUN: FileCheck -check-prefix LP32 --input-file=%t-32.s %s &&
>> +// RUN: true
>> +
>> +class UnicodeString {
>> +public:
>> +        enum EInvariant { kInvariant };
>> +        int extract(int targetCapacity, enum EInvariant inv) const;
>> +        int extract(unsigned targetLength, const char *codepage)  
>> const;
>> +};
>> +
>> +void foo(const UnicodeString& id) {
>> +        enum {BUFLEN = 128 };
>> +        id.extract(BUFLEN - 2, UnicodeString::kInvariant);
>> +}
>> +
>> +// CHECK-LP64: call      
>> __ZNK13UnicodeString7extractEiNS_10EInvariantE
>> +
>> +// CHECK-LP32: call      
>> L__ZNK13UnicodeString7extractEiNS_10EInvariantE
>
> Could we turn this into a Sema-based check, so that we don't have to  
> go through code generation to perform the test? You can give the two  
> "extract" functions different return types (int* vs. float*), and  
> then initialize a variable with the return type. Also, we should  
> sanitize the names of UnicodeString, extract, etc.
>

Fixed in http://llvm.org/viewvc/llvm-project?view=rev&revision=83350
Thanks for the review.

-  Fariborz

> 	- Doug




More information about the cfe-commits mailing list