Author: gbiv Date: Fri Jun 30 15:33:24 2017 New Revision: 306899 URL: http://llvm.org/viewvc/llvm-project?rev=306899&view=rev Log: [Parse] Use normalized attr name for late-parsing checks.
Modified: cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/test/Sema/diagnose_if.c Modified: cfe/trunk/lib/Parse/ParseDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=306899&r1=306898&r2=306899&view=diff ============================================================================== --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) +++ cfe/trunk/lib/Parse/ParseDecl.cpp Fri Jun 30 15:33:24 2017 @@ -71,11 +71,18 @@ TypeResult Parser::ParseTypeName(SourceR return Actions.ActOnTypeName(getCurScope(), DeclaratorInfo); } +/// \brief Normalizes an attribute name by dropping prefixed and suffixed __. +static StringRef normalizeAttrName(StringRef Name) { + if (Name.size() >= 4 && Name.startswith("__") && Name.endswith("__")) + return Name.drop_front(2).drop_back(2); + return Name; +} + /// isAttributeLateParsed - Return true if the attribute has arguments that /// require late parsing. static bool isAttributeLateParsed(const IdentifierInfo &II) { #define CLANG_ATTR_LATE_PARSED_LIST - return llvm::StringSwitch<bool>(II.getName()) + return llvm::StringSwitch<bool>(normalizeAttrName(II.getName())) #include "clang/Parse/AttrParserStringSwitches.inc" .Default(false); #undef CLANG_ATTR_LATE_PARSED_LIST @@ -200,13 +207,6 @@ void Parser::ParseGNUAttributes(ParsedAt } } -/// \brief Normalizes an attribute name by dropping prefixed and suffixed __. -static StringRef normalizeAttrName(StringRef Name) { - if (Name.size() >= 4 && Name.startswith("__") && Name.endswith("__")) - Name = Name.drop_front(2).drop_back(2); - return Name; -} - /// \brief Determine whether the given attribute has an identifier argument. static bool attributeHasIdentifierArg(const IdentifierInfo &II) { #define CLANG_ATTR_IDENTIFIER_ARG_LIST Modified: cfe/trunk/test/Sema/diagnose_if.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/diagnose_if.c?rev=306899&r1=306898&r2=306899&view=diff ============================================================================== --- cfe/trunk/test/Sema/diagnose_if.c (original) +++ cfe/trunk/test/Sema/diagnose_if.c Fri Jun 30 15:33:24 2017 @@ -153,3 +153,7 @@ void runAlwaysWarnWithArg(int a) { // Test that diagnose_if warnings generated in system headers are not ignored. #include "Inputs/diagnose-if-warn-system-header.h" + +// Bug: we would complain about `a` being undeclared if this was spelled +// __diagnose_if__. +void underbarName(int a) __attribute__((__diagnose_if__(a, "", "warning"))); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits