Rebase with upstream and update code as per comments
Please use GitHub pull requests for new patches. Phabricator shutdown timeline
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
Advanced Search
Yesterday
May 26 2023
In D151383#4377043, @PiotrZSL wrote:LGTM, you may consider reducing commit message (aka review description by removing example and error from it, and leaving just plain description of a change).
use fully qualified name in code and documentation
Make changes as per comments
May 25 2023
Use single backticks for options
please let me know if there is better way to do the matching hasAnyReturnType. We could also sort then do binarysearch instead of looping through the list of ret types.
Add tests, update docs and extend matchcallexpr
May 24 2023
Reuse diag code
@royjacobson Please list other types that must be included here. The tests are coming...
May 23 2023
I used the patch to compile LLVM, apache/arrow, apache/trafficserver, folly, tensorstore, protobuf. I did not see any cases with pointer arithmetic in these repos. I have uploaded the make logs for the projects with diagnostic warnings.
In D147844#4361956, @aaron.ballman wrote:In D147844#4335598, @dblaikie wrote:In D147844#4329497, @aaron.ballman wrote:In general, I think this is incremental progress on the diagnostic behavior. However, it's clear that there is room for interpretation on what is or is not a false positive diagnostic for this,
I hope we can agree on what a false positive is here - when the warning fires but the code is what the developer intended (ie: the existing code with the existing language semantics produce the desired result, the "fix" is to add parentheses that explicitly encode the language's existing rules/behavior anyway).
I agree with that definition -- that's a useful way to approach this, thank you!
Not that we don't have warnings that do this - that encourage parens to reinforce what the language already does to be more explicit/intentional about it, and in some cases it's not that uncommon that the user will be adding parens that reinforce the precedence rules anyway.
Yup, which is largely what this patch is about.
Like, I think all the fixes in libc++, llvm, etc, are false positives? (none of them found bugs/unintended behavior)
Yes, they all are false positives by the above definition.
Are there any examples of bugs being found by this warning in a codebase? (& how many false positives in such a codebase did it also flag?)
This would be good to know, but a bit of a heavy lift to require of @chaitanyav because they were working on this issue (https://github.com/llvm/llvm-project/issues/61943) with a "good first issue" label that is starting to look a bit like it was misleading (sorry about that!). However, if you're able to try compiling some larger projects with your patch applied to see if it spots any bugs in real world code, that would be very helpful!
May 22 2023
Rebase with upstream
Rebase with upstream
May 20 2023
Rebase with upstream
May 11 2023
Rebase with upstream
May 10 2023
Remove extra parens
May 9 2023
Rebase with upstream and remove duplicate line from ReleaseNotes
May 8 2023
Rebase with upstream
May 4 2023
@shafik @aaron.ballman I see some errors
[2/2503] Building DiagnosticCrossTUKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=CrossTU -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc -d tools/clang/include/clang/Basic/DiagnosticCrossTUKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [3/2503] Building DiagnosticASTKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticASTKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticASTKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=AST -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticASTKinds.inc -d tools/clang/include/clang/Basic/DiagnosticASTKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [4/2503] Building DiagnosticFrontendKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticFrontendKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=Frontend -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticFrontendKinds.inc -d tools/clang/include/clang/Basic/DiagnosticFrontendKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [5/2503] Building DiagnosticAnalysisKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticAnalysisKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticAnalysisKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=Analysis -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticAnalysisKinds.inc -d tools/clang/include/clang/Basic/DiagnosticAnalysisKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [6/2503] Building DiagnosticDriverKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticDriverKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticDriverKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=Driver -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticDriverKinds.inc -d tools/clang/include/clang/Basic/DiagnosticDriverKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [7/2503] Building DiagnosticCommentKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticCommentKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticCommentKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=Comment -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticCommentKinds.inc -d tools/clang/include/clang/Basic/DiagnosticCommentKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [8/2503] Building DiagnosticCommonKinds.inc... FAILED: tools/clang/include/clang/Basic/DiagnosticCommonKinds.inc /home/nvellanki/scratch/llvm-project/tools/clang/include/clang/Basic/DiagnosticCommonKinds.inc cd /home/nvellanki/scratch/llvm-project && /home/nvellanki/scratch/llvm-project/bin/clang-tblgen -gen-clang-diags-defs -clang-component=Common -I /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic -I/home/nvellanki/scratch/llvm-project/clang/include -I/home/nvellanki/scratch/llvm-project/tools/clang/include -I/home/nvellanki/scratch/llvm-project/include -I/home/nvellanki/scratch/llvm-project/llvm/include /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td --write-if-changed -o tools/clang/include/clang/Basic/DiagnosticCommonKinds.inc -d tools/clang/include/clang/Basic/DiagnosticCommonKinds.inc.d Included from /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/Diagnostic.td:168: /home/nvellanki/scratch/llvm-project/clang/include/clang/Basic/DiagnosticSemaKinds.td:9443:11: error: Variable not defined: 'CXXPre2bCompat' InGroup<CXXPre2bCompat>, DefaultIgnore; ^ [9/2503] Building CXX object lib/LTO/CMakeFiles/LLVMLTO.dir/LTO.cpp.o ninja: build stopped: subcommand failed.
@Peiming can you please check, the build is failing. Pasting the link to premerge-check https://buildkite.com/llvm-project/premerge-checks/builds/150384#0187e78d-a047-440e-9018-0eecabff91c8
In file included from /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/CodegenEnv.h:17, from /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp:13: /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/LoopEmitter.h: In member function ‘constexpr mlir::sparse_tensor::TensorLevel mlir::sparse_tensor::LoopEmitter::makeTensorLevel(mlir::sparse_tensor::TensorId, mlir::sparse_tensor::Level) const’: /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/LoopEmitter.h:199:29: error: call to non-‘constexpr’ function ‘unsigned int mlir::sparse_tensor::LoopEmitter::getNumTensors() const’ 199 | return l * getNumTensors() + t; | ~~~~~~~~~~~~~^~ /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/LoopEmitter.h:195:12: note: ‘unsigned int mlir::sparse_tensor::LoopEmitter::getNumTensors() const’ declared here 195 | unsigned getNumTensors() const { return tensors.size(); } | ^~~~~~~~~~~~~ In file included from /usr/include/c++/11/cassert:44, from /home/scratch/llvm-project/llvm/include/llvm/Support/CommandLine.h:34, from /home/scratch/llvm-project/mlir/include/mlir/Pass/PassOptions.h:21, from /home/scratch/llvm-project/mlir/include/mlir/Pass/PassRegistry.h:17, from /home/scratch/llvm-project/mlir/include/mlir/Pass/Pass.h:13, from /home/scratch/llvm-project/mlir/include/mlir/Dialect/SparseTensor/Transforms/Passes.h:21, from /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/CodegenEnv.h:21, from /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp:13: /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/CodegenEnv.h: In member function ‘constexpr mlir::sparse_tensor::TensorLevel mlir::sparse_tensor::CodegenEnv::makeTensorLevel(mlir::sparse_tensor::TensorId, mlir::sparse_tensor::Level) const’: /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/CodegenEnv.h:95:37: error: call to non-‘constexpr’ function ‘unsigned int mlir::sparse_tensor::LoopEmitter::getNumTensors() const’ 95 | assert(loopEmitter.getNumTensors() == linalgOp->getNumOperands() && | ~~~~~~~~~~~~~~~~~~~~~~~~~^~ In file included from /home/scratch/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/CodegenEnv.h:17
May 3 2023
Rebase with upstream
@dang @ributzka I missed adding semicolons to function declaration fragments in this commit https://github.com/llvm/llvm-project/commit/afce10c5b60fada1db369d3770f4389da7ef30ef . Please review this.
Apr 28 2023
Rebase with upstream
Apr 26 2023
Revert libcxx libcxxabi files unrelated to the issue
Add parentheses around integer expressions in libcxx tests
Revert to earliest patch
In D147844#4299874, @aaron.ballman wrote:In D147844#4299856, @chaitanyav wrote:Disable precedence conditional warning by default; Revert changes to test files
I'm sorry, I think there was a miscommunication. We were saying that we don't typically want off-by-default diagnostics at all, not asking to turn this one off by default. We've found that when a diagnostic is off by default, it very rarely gets enabled by enough projects to be worth having the diagnostic. So we instead expect diagnostics to have a very low false positive rate so that they can be on by default without worrying that a lot of users will have to disable it due to chattiness.
So instead of making this diagnostic be DefaultIgnore, I think you should back out most of the recent changes so we're back to only the small number of additional diagnostics in the earlier patches.
Disable precedence conditional warning by default; Revert changes to test files
@aaron.ballman just for learning, can you point me to the code where a warning is selectively enabled/disabled based on a flag. For e.g. -Wunused-comparison
Apr 25 2023
Fix more failing tests due to missing parentheses in conditional operator expression
Added parentheses to lots of files to fix the precedence warning. Still a lot to change in OpenMP.
Fix tests/code by adding parentheses around the conditional operator expression
In D147844#4293299, @cjdb wrote:I think this is a good diagnostic to add: it improves readability and eliminates ambiguities. My only request is that if there isn't already a FixIt hint, one be added, please.
@cjb quick question, should we restrict to
Apr 22 2023
Apr 21 2023
Revise commit message
Modify the commit message
Fix indentation
@aaron.ballman please take a look.
Apr 20 2023
Place parentheses around conditional expression to prevent precedence warnings since -Werror is enabled on build
clang-format the changes to the file
Place parentheses around conditional expression to prevent precedence warnings since -Werror is enabled on build
Place parentheses around & expression since -Werror is enabled for build
Update test to use parentheses around conditional operator
Update SemaCXX tests to use parentheses around conditional operator
Apr 19 2023
@aaron.ballman I have made more changes so that the warning is emitted on other integer expressions where the opertors has higher precedence than conditional operator.
Emit warning when implicit cast from int to bool in an conditional operator expression
In D147844#4281288, @aaron.ballman wrote:In D147844#4278384, @chaitanyav wrote:@aaron.ballman am looking into this. If i change it back to
operation int();
and add
Stream& operator<<(bool)
i get
`
error: 'warning' diagnostics expected but not seen:File /usr/home/nvellanki/explore/llvm-project/clang/test/Sema/parentheses.cpp Line 68: operator '?:' has lower precedence than '<<'error: 'note' diagnostics expected but not seen:
File /usr/home/nvellanki/explore/llvm-project/clang/test/Sema/parentheses.cpp Line 68: place parentheses around the '<<' expression to silence this warning File /usr/home/nvellanki/explore/llvm-project/clang/test/Sema/parentheses.cpp Line 68: place parentheses around the '?:' expression to evaluate it first3 errors generated.
`
But it works correctly with std::cout`
test.cpp:7:30: warning: operator '?:' has lower precedence than '<<'; '<<' will be evaluated first [-Wparentheses]std::cout << "Test" << a ? 1 : 0; ~~~~~~~~~~~~~~~~~~~~~~~~ ^test.cpp:7:30: note: place parentheses around the '<<' expression to silence this warning
std::cout << "Test" << a ? 1 : 0; ^ ( )test.cpp:7:30: note: place parentheses around the '?:' expression to evaluate it first
std::cout << "Test" << a ? 1 : 0; ^ ( )I would expect to get the same diagnostic with either operator int() or operator bool() as the precedence is the same either way. I think what might be happening here is that ExprLooksBoolean is getting tricked into thinking the expression isn't boolean when it actually is (I think this might be the FIXME comment in that function needing to be addressed).
Apr 18 2023
@aaron.ballman am looking into this. If i change it back to
operation int();
and add
Stream& operator<<(bool)
i get
`
error: 'warning' diagnostics expected but not seen:
File /usr/home/nvellanki/explore/llvm-project/clang/test/Sema/parentheses.cpp Line 68: operator '?:' has lower precedence than '<<'
error: 'note' diagnostics expected but not seen:
File /usr/home/nvellanki/explore/llvm-project/clang/test/Sema/parentheses.cpp Line 68: place parentheses around the '<<' expression to silence this warning File /usr/home/nvellanki/explore/llvm-project/clang/test/Sema/parentheses.cpp Line 68: place parentheses around the '?:' expression to evaluate it first
3 errors generated.
`
But it works correctly with std::cout
Update release notes about the fix
Apr 17 2023
re-opening the revision to make further updates as per comments on the github issue.
Apr 14 2023
Apr 10 2023
@aaron.ballman Please review this.
Apr 8 2023
output for testcases mentioned in https://github.com/llvm/llvm-project/issues/61943
test.cpp:6:30: warning: overloaded operator << has higher precedence than comparison operator [-Woverloaded-shift-op-parentheses] std::cout << "Test" << a == 5 ? 1 : 0; ~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~ test.cpp:6:25: note: place parentheses around the '<<' expression to silence this warning std::cout << "Test" << a == 5 ? 1 : 0; ^ ( ) test.cpp:6:30: note: place parentheses around comparison expression to evaluate it first std::cout << "Test" << a == 5 ? 1 : 0; ^ ( ) test.cpp:6:30: error: invalid operands to binary expression ('ostream' and 'int') std::cout << "Test" << a == 5 ? 1 : 0; ~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~ test.cpp:7:30: warning: operator '?:' has lower precedence than '<<'; '<<' will be evaluated first [-Wparentheses] std::cout << "Test" << a ? 1 : 0; ~~~~~~~~~~~~~~~~~~~~~~~~ ^ test.cpp:7:30: note: place parentheses around the '<<' expression to silence this warning std::cout << "Test" << a ? 1 : 0; ^ ( ) test.cpp:7:30: note: place parentheses around the '?:' expression to evaluate it first std::cout << "Test" << a ? 1 : 0; ^ ( ) test.cpp:8:49: warning: operator '?:' has lower precedence than '<<'; '<<' will be evaluated first [-Wparentheses] std::cout << "Test" << static_cast<bool>(a) ? 1 : 0; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ test.cpp:8:49: note: place parentheses around the '<<' expression to silence this warning std::cout << "Test" << static_cast<bool>(a) ? 1 : 0; ^ ( ) test.cpp:8:49: note: place parentheses around the '?:' expression to evaluate it first std::cout << "Test" << static_cast<bool>(a) ? 1 : 0; ^
Mar 30 2023
Mar 29 2023
@dang Please review.
Add comment to indicate that id<protocol>* is not an qualified id type
Mar 27 2023
looks like its waiting on libcxx build(https://buildkite.com/llvm-project/premerge-checks/builds/143382#job-01872209-2788-44ef-930c-11e741ff906e) and it is actively being debugged as per comments on other differential.
Mar 25 2023
Mar 23 2023
Thank you, I will commit myself. Should i wait for the build to finish?. this will be my first direct commit to repo.
one diagnostic per line when there are multiple diagnostics expected
@dang Please review the test/output.
update test to check for id type
Will update the test to also include a Id instance method.
Mar 22 2023
I reported the flang failures https://github.com/llvm/llvm-project/issues/61634 and it was reverted. How can i trigger a new build with TOT?
@aaron.ballman Please review.
Added tests to check for the right diagnostic messages and highlighting at correct place
Update the release docs about the fix
Mar 21 2023
Please review this.
test outputs for C, C++
Only proceed with scalar initialization if number of elements is less than 2
It will fall through to scalar type to do field wise initialization
test.cpp:2:34: error: excess elements in scalar initializer _Complex double dd = {1.0, 2.0 , 3.0}; ^~~ test.cpp:3:32: error: excess elements in scalar initializer _Complex float fd = {1.0, 2.0, 3.0, 4.0, 5.0}; ^~~ test.cpp:4:42: error: excess elements in scalar initializer constexpr _Complex double d = {1.0, 2.0, 3.0, 45}; ^~~ test.cpp:11:23: error: no viable conversion from 'foo' to '_Complex double' _Complex double ds = {f, 1.0, b}; ^ test.cpp:13:28: error: no viable conversion from 'foo' to 'double' _Complex double fg = {1.0, f}; ^ test.cpp:15:33: error: excess elements in scalar initializer _Complex double gg = {1.0, 2.0, f}; ^ 6 errors generated.
Mar 20 2023
Name: NagaChaitanya Vellanki
email: pnagato@protonmail.com
Thank you, Please go ahead and Commit the change. I don't have commit access, Will follow the instructions on the page to get access.
Mar 19 2023
The debian build is failing because of this https://github.com/google/llvm-premerge-checks/issues/436
Mar 18 2023
- Update reference output in underscored.c
- combine return and append semicolon fragment
- Update reference output in underscored.c
- combine return and append semicolon fragment