Commit Graph

79 Commits

Author SHA1 Message Date
Kristina Bessonova afbe54f2fe [clang] Fix wrong -Wunused-local-typedef warning within a template function
Partially fixes PR24883.

The patch sets Reference bit while instantiating a typedef if it
previously was found referenced.

Reviewed By: thakis

Differential Revision: https://reviews.llvm.org/D114382
2022-03-21 13:21:25 +02:00
Chuanqi Xu 61528a7778 [NFC] Add tests for ODR checking of default template argument 2022-01-28 15:32:28 +08:00
David Blaikie aee4925507 Recommit: Compress formatting of array type names (int [4] -> int[4])
Based on post-commit review discussion on
2bd8493847 with Richard Smith.

Other uses of forcing HasEmptyPlaceHolder to false seem OK to me -
they're all around pointer/reference types where the pointer/reference
token will appear at the rightmost side of the left side of the type
name, so they make nested types (eg: the "int" in "int *") behave as
though there is a non-empty placeholder (because the "*" is essentially
the placeholder as far as the "int" is concerned).

This was originally committed in 277623f4d5

Reverted in f9ad1d1c77 due to breakages
outside of clang - lldb seems to have some strange/strong dependence on
"char [N]" versus "char[N]" when printing strings (not due to that name
appearing in DWARF, but probably due to using clang to stringify type
names) that'll need to be addressed, plus a few other odds and ends in
other subprojects (clang-tools-extra, compiler-rt, etc).
2021-10-21 11:34:43 -07:00
David Blaikie f9ad1d1c77 Revert "Compress formatting of array type names (int [4] -> int[4])"
Looks like lldb has some issues with this - somehow it causes lldb to
treat a "char[N]" type as an array of chars (prints them out
individually) but a "char [N]" is printed as a string. (even though the
DWARF doesn't have this string in it - it's something to do with the
string lldb generates for itself using clang)

This reverts commit 277623f4d5.
2021-10-14 14:49:25 -07:00
David Blaikie 277623f4d5 Compress formatting of array type names (int [4] -> int[4])
Based on post-commit review discussion on
2bd8493847 with Richard Smith.

Other uses of forcing HasEmptyPlaceHolder to false seem OK to me -
they're all around pointer/reference types where the pointer/reference
token will appear at the rightmost side of the left side of the type
name, so they make nested types (eg: the "int" in "int *") behave as
though there is a non-empty placeholder (because the "*" is essentially
the placeholder as far as the "int" is concerned).
2021-10-14 14:23:32 -07:00
Weverything a60e892729 [ODRHash] Fix wrong error message with bitfields and mutable.
Add a check to bitfield mismatches that may have caused Clang to
give an error about the bitfield instead of being mutable.
2020-01-14 21:12:15 -08:00
Richard Trieu 82df97ca8e [ODRHash] Skip some typedef types.
In some cases, a typedef only strips aways a keyword for a type, keeping the
same name as the root record type.  This causes some confusion when the type
is defined in one modules but only forward declared in another.  Skipping the
typedef and going straight to the record will avoid this issue.

typedef struct S {} S;
S* s;  // S is TypedefType here

struct S;
S* s;  // S is RecordType here

llvm-svn: 364119
2019-06-22 00:32:19 +00:00
Richard Trieu cf9bd8ade7 Reduce amount of work ODR hashing does.
When a FunctionProtoType is in the original type in a DecayedType, the decayed
type is a PointerType which points back the original FunctionProtoType.  The
visitor for ODRHashing will attempt to process both Type's, doing double work.
By chaining together multiple DecayedType's and FunctionProtoType's, this would
result in 2^N Type's visited only N DecayedType's and N FunctionProtoType's
exsit.  Another bug where VisitDecayedType and VisitAdjustedType did
redundant work doubled the work at each level, giving 4^N Type's visited.  This
patch removed the double work and detects when a FunctionProtoType decays to
itself to only check the Type once.  This lowers the exponential runtime to
linear runtime.  Fixes https://bugs.llvm.org/show_bug.cgi?id=41625

llvm-svn: 359960
2019-05-04 04:22:33 +00:00
Richard Trieu a7f38f7ca3 Add triple to test case.
This test uses enums, which have different behavior when targeting different
systems.  Specifying a triple will give predictable behavior to this test.

llvm-svn: 341496
2018-09-05 21:55:09 +00:00
Richard Trieu 22ddc282b5 [ODRHash] Extend hash to support all Type's.
llvm-svn: 341421
2018-09-04 22:53:19 +00:00
Eli Friedman 7499610e1b Diagnose invalid cv-qualifiers for friend decls.
Differential Revision: https://reviews.llvm.org/D45712

llvm-svn: 338931
2018-08-03 22:09:44 +00:00
Richard Trieu ab4d730f14 [ODRHash] Support hashing enums.
llvm-svn: 337978
2018-07-25 22:52:05 +00:00
Richard Trieu 27c1b1a638 [ODRHash] Merge the two function hashes into one.
Functions that are a sub-Decl of a record were hashed differently than other
functions.  This change keeps the AddFunctionDecl function and the hash of
records now calls this function.  In addition, AddFunctionDecl has an option
to perform a hash as if the body was absent, which is required for some
checks after loading modules.  Additional logic prevents multiple error
message from being printed.

llvm-svn: 336632
2018-07-10 01:40:50 +00:00
Richard Trieu 5d01406cc4 [ODRHash] Adjust info stored for FunctionTemplateDecl.
Avoid storing information for definitions since those can be out-of-line and
vary between modules even when the declarations are the same.

llvm-svn: 334151
2018-06-07 00:20:58 +00:00
Richard Trieu 9359e8f22a [ODRHash] Support FunctionTemplateDecl in records.
llvm-svn: 333486
2018-05-30 01:12:26 +00:00
Richard Trieu 7282d320b7 [ODRHash] Hash template arguments of methods.
llvm-svn: 330789
2018-04-25 00:31:15 +00:00
Richard Trieu 15970af92a [ODRHash] Support pointer and reference types.
Recommit r328404 which was reverted in rL328404.  r329869 fixed the issue that
caused the revert.

llvm-svn: 330074
2018-04-13 22:34:43 +00:00
Richard Trieu caaccee77d [ODRHash] Skip more types hashing TypedefType
To get the underlying type for TypedefType's, also skip ElaboratedType's.

llvm-svn: 329869
2018-04-12 02:26:49 +00:00
Eric Christopher a26755cd55 Temporarily revert r328404:
commit 519b97132a4c960e8dedbfe4290d86970d92e995
Author: Richard Trieu <rtrieu@google.com>
Date:   Sat Mar 24 00:52:44 2018 +0000

    [ODRHash] Support pointer and reference types.

    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328404 91177308-0d34-0410-b5e6-96231b3b80d8

As it's breaking some tests. I've communicated with Richard offline about testcases.

llvm-svn: 329001
2018-04-02 18:33:47 +00:00
Richard Trieu 8ce0ab3923 [ODRHash] Support pointer and reference types.
llvm-svn: 328404
2018-03-24 00:52:44 +00:00
Richard Trieu 4d06bef38d Update StmtProfile.cpp to handle zero template arguments.
Treat having no templates arguments differently than having zero template
arguments when profiling.

llvm-svn: 325040
2018-02-13 19:53:40 +00:00
Richard Trieu e6caa26e5d [ODRHash] Support ODR violation detection in functions.
Extend the hashing to functions, which allows detection of function definition
mismatches across modules.  This is a re-commit of r320230.

llvm-svn: 321395
2017-12-23 00:41:01 +00:00
Richard Trieu c4ec87af1d Revert r320230 to fix buildbots.
llvm-svn: 320239
2017-12-09 03:02:21 +00:00
Richard Trieu e81caeb314 [ODRHash] Support ODR violation detection in functions.
Extend the hashing to functions, which allows detection of function definition
mismatches across modules.

llvm-svn: 320230
2017-12-09 01:29:40 +00:00
Richard Trieu 73cf924104 Update ODR hashing tests
Add a mix of postive and negative tests to check that wrong Decls won't be
flagged in the diagnostic.  Split the check everything test and moved the
pieces closer to where the related tests are.

llvm-svn: 317394
2017-11-04 01:20:50 +00:00
Richard Trieu e13eabe7d3 [ODRHash] Add base classes to hashing CXXRecordDecl.
llvm-svn: 314581
2017-09-30 02:19:17 +00:00
Richard Trieu 498117bf11 [ODRHash] Diagnose differing template parameters.
llvm-svn: 311519
2017-08-23 02:43:59 +00:00
Richard Trieu 1c71d5143a [ODRHash] Revert r307743 which reverted r307720
Reapply r307720 to allow processing of constructors and destructors.  Reuse
the diagnostics for CXXMethodDecl for them.

llvm-svn: 308077
2017-07-15 02:55:13 +00:00
Richard Trieu 9747a7c562 [ODRHash] Avoid taking the types of FunctionDecl's
FunctionDecl already hashes most of the information in the function's type.
Add hashing of the return type, and skip hashing the function's type to avoid
redundancy and extra work when computing the hash.

llvm-svn: 307986
2017-07-14 01:36:41 +00:00
Richard Trieu 68fbf8563f [ODRHash] Revert r307720 to fix buildbot.
llvm-svn: 307743
2017-07-12 00:38:27 +00:00
Richard Trieu 1d06f44f0f [ODRHash] Support more method types.
Hash CXXConstructorDecl and CXXDestructorDecl.  Extend the diagnostics from
CXXMethodDecl to include constructors and destructors.

llvm-svn: 307720
2017-07-11 22:10:49 +00:00
Richard Trieu ac6a1b6417 [ODRHash] Support FriendDecl
llvm-svn: 307458
2017-07-08 02:04:42 +00:00
Richard Trieu 96b4164968 [ODRHash] Revert r305104 - Skip inline namespaces when hashing.
Test inline namespaces and handle them in the ODR hash again.

llvm-svn: 306926
2017-07-01 02:00:05 +00:00
Richard Trieu 8844c52266 [ODRHash] Support Type TemplateArgument
llvm-svn: 306904
2017-06-30 22:40:33 +00:00
Richard Trieu 3e03d3ee54 [ODRHash] Improve typedef handling.
Follow typedef chains to find the root type when processing types, and also
keep track of qualifiers.

llvm-svn: 306753
2017-06-29 22:53:04 +00:00
Richard Trieu 6e13ff33c8 [ODRHash] Hash VarDecl members.
These VarDecl's are static data members of classes.  Since the initializers are
also hashed, this also provides checking for default arguments to methods.

llvm-svn: 305543
2017-06-16 02:44:29 +00:00
Richard Trieu d9201d0a02 [ODRHash] Hash TemplateArgument::Pack and TemplateTypeParmType
llvm-svn: 305440
2017-06-15 01:35:06 +00:00
Richard Trieu ee132d6eb2 [ODRHash] Hash Template and TemplateExpansion in TemplateArgument.
llvm-svn: 305361
2017-06-14 03:17:26 +00:00
Richard Trieu 1dcb405ca1 [ODRHash] Hash Expr for TemplateArgument::Expression
llvm-svn: 305360
2017-06-14 01:28:00 +00:00
Richard Trieu 3b261bb725 [ODRHash] Add TemplateArgument kind to hash.
llvm-svn: 305328
2017-06-13 22:21:18 +00:00
Richard Trieu 11d566acee [ODRHash] Add diagnostic messages for typedef and type alias.
llvm-svn: 305238
2017-06-12 21:58:22 +00:00
Richard Trieu be5cb93088 Revert r305110 to fix buildbot
llvm-svn: 305130
2017-06-09 23:03:40 +00:00
Richard Trieu 4ab80f2e9e [ODRHash] Add support for TemplateArgument types.
Recommit r304592 that was reverted in r304618.  r305104 should have fixed the
issue.

llvm-svn: 305110
2017-06-09 21:00:10 +00:00
Richard Trieu d064d1b6e8 Revert r304592
r304592 - [ODRHash] Add support for TemplateArgument types.
Possibly causing one of the errors in modules build bot.

llvm-svn: 304618
2017-06-03 00:11:23 +00:00
Richard Trieu 24c302b915 [ODRHash] Add support for TemplateArgument types.
llvm-svn: 304592
2017-06-02 20:35:29 +00:00
Richard Trieu 96b4962c8d [ODRHash] Support TemplateSpecializationType
llvm-svn: 304261
2017-05-31 00:31:58 +00:00
Richard Trieu cc6893736b [ODRHash] Revert r303450 to fix buildbot
r303450
[ODRHash] Support TemplateName and TemplateArgument

llvm-svn: 303459
2017-05-19 22:35:41 +00:00
Richard Trieu d05a006a53 [ODRHash] Support TemplateName and TemplateArgument
llvm-svn: 303450
2017-05-19 20:05:16 +00:00
Richard Trieu ce81b194a0 [ODRHash] Support NestedNameSpecifier
llvm-svn: 303233
2017-05-17 03:23:35 +00:00
Richard Trieu 58bb7bd18a [ODRHash] Support more types in the ODR checker.
Added support for TagType, TypeWithKeyword, and all children types.

llvm-svn: 303231
2017-05-17 02:29:02 +00:00