[cfe-commits] r104470 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaExpr.cpp test/SemaCXX/alignof-sizeof-reference.cpp

Douglas Gregor dgregor at apple.com
Sun May 23 12:43:23 PDT 2010


Author: dgregor
Date: Sun May 23 14:43:23 2010
New Revision: 104470

URL: http://llvm.org/viewvc/llvm-project?rev=104470&view=rev
Log:
Complain about sizeof(overloaded function) rather than crashing.

Modified:
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
    cfe/trunk/lib/Sema/SemaExpr.cpp
    cfe/trunk/test/SemaCXX/alignof-sizeof-reference.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=104470&r1=104469&r2=104470&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sun May 23 14:43:23 2010
@@ -1870,6 +1870,9 @@
 // Expressions.
 def ext_sizeof_function_type : Extension<
   "invalid application of 'sizeof' to a function type">, InGroup<PointerArith>;
+def err_sizeof_alignof_overloaded_function_type : Error<
+  "invalid application of '%select{sizeof|__alignof}0' to an overloaded "
+  "function">;
 def ext_sizeof_void_type : Extension<
   "invalid application of '%0' to a void type">, InGroup<PointerArith>;
 def err_sizeof_alignof_incomplete_type : Error<

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=104470&r1=104469&r2=104470&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Sun May 23 14:43:23 2010
@@ -2027,6 +2027,12 @@
     return true;
   }
 
+  if (Context.hasSameUnqualifiedType(exprType, Context.OverloadTy)) {
+    Diag(OpLoc, diag::err_sizeof_alignof_overloaded_function_type)
+      << !isSizeof << ExprRange;
+    return true;
+  }
+  
   return false;
 }
 

Modified: cfe/trunk/test/SemaCXX/alignof-sizeof-reference.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/alignof-sizeof-reference.cpp?rev=104470&r1=104469&r2=104470&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/alignof-sizeof-reference.cpp (original)
+++ cfe/trunk/test/SemaCXX/alignof-sizeof-reference.cpp Sun May 23 14:43:23 2010
@@ -7,3 +7,9 @@
   static_assert(alignof(r) == 1, "bad alignment");
   static_assert(sizeof(r) == 1, "bad size");
 }
+
+void f(); 
+void f(int); 
+void g() { 
+  sizeof(&f); // expected-error{{invalid application of 'sizeof' to an overloaded function}}
+}





More information about the cfe-commits mailing list