From: Sean Hunt Date: Wed, 3 Nov 2010 01:07:06 +0000 (+0000) Subject: Provide an error when a non-identifier name (such as an operator) is used as a X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7533a5b65f81a4eed1e0f0afeb859e26bc0c056b;p=clang Provide an error when a non-identifier name (such as an operator) is used as a parameter name. Fixes PR8012. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118138 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 2972e9b16b..33b8660c1d 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -95,6 +95,8 @@ def ext_anon_param_requires_type_specifier : Extension< "type specifier required for unnamed parameter, defaults to int">; def err_bad_variable_name : Error< "'%0' cannot be the name of a variable or data member">; +def err_bad_parameter_name : Error< + "'%0' cannot be the name of a parameter">; def err_parameter_name_omitted : Error<"parameter name omitted">; def warn_unused_parameter : Warning<"unused parameter %0">, InGroup, DefaultIgnore; diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 285173628c..10a23ec43e 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -4757,8 +4757,18 @@ Decl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) { << Context.getTypeDeclType(OwnedDecl); } + // Ensure we have a valid name + IdentifierInfo *II = 0; + if (D.hasName()) { + II = D.getIdentifier(); + if (!II) { + Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) + << GetNameForDeclarator(D).getName().getAsString(); + D.setInvalidType(true); + } + } + // Check for redeclaration of parameters, e.g. int foo(int x, int x); - IdentifierInfo *II = D.getIdentifier(); if (II) { LookupResult R(*this, II, D.getIdentifierLoc(), LookupOrdinaryName, ForRedeclaration); diff --git a/test/SemaCXX/PR8012.cpp b/test/SemaCXX/PR8012.cpp new file mode 100644 index 0000000000..f2f07ad364 --- /dev/null +++ b/test/SemaCXX/PR8012.cpp @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x + +void foo (int operator+); // expected-error{{cannot be the name of a parameter}}