swiftlang / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. This fork is used to manage Swift’s stable releases of Clang as well as support the Swift project.
https://llvm.org
Other
1.12k stars 331 forks source link

[ObjC] Name lookup in methods shouldn't allow shadowing types #9632

Closed apple-fcloutier closed 1 day ago

apple-fcloutier commented 3 days ago

Arguably as a bug, Clang has previously not mixed up Objective-C parameter names with types. This allows developers to write parameter names that should shadow type names, but don't. For instance:

@interface Foo
-(void)foo:(int)id bar:(id)name; // OK
@end

Commit 97788089988a2ace63d717cadbcfe3443f380f9c changed the way that parameters are parsed to bring it more in line with how C parameters are parsed, but it breaks the example above. Given an expectation that the change wouldn't introduce source breaks, this is not something we can go forward with.

977880... did this so that late-parsed attributes could reference Objective-C parameters. This change buffers Objective-C parameter info until after all parameters are parsed and turns them into parameter declarations before realizing late-parsed attributes instead.

Radar-ID: 139996306

apple-fcloutier commented 3 days ago

@swift-ci please test llvm

apple-fcloutier commented 3 days ago

@swift-ci test

AreaZR commented 3 days ago

I will do one better, merge this into 19.x

apple-fcloutier commented 3 days ago

I can merge to any other branch that https://github.com/llvm/llvm-project/pull/113745 made it to, but as a guest compiler contributor from SEAR, I don't know what branch any given version number matches (or their position in the forwarding graph, for that matter). Please let me know what that would be.

AreaZR commented 3 days ago

Actually, doing it here is fine since it's not passing right now on 19.x

apple-fcloutier commented 3 days ago
/Users/ec2-user/jenkins/workspace/apple-llvm-project-pr-macos/branch-stable/20240723/sourcekit-lsp/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift:318:107: error: cannot convert value of type 'URL' to expected argument type 'TSCAbsolutePath' (aka 'AbsolutePath')
316 |       )
317 |     } else if let scratchDirectory = options.swiftPMOrDefault.scratchPath,
318 |       let scratchDirectoryPath = try? AbsolutePath(validating: scratchDirectory, relativeTo: AbsolutePath(projectRoot))
    |                                                                                                           `- error: cannot convert value of type 'URL' to expected argument type 'TSCAbsolutePath' (aka 'AbsolutePath')
319 |     {
320 |       location.scratchDirectory = scratchDirectoryPath

Pretty sure this isn't my fault; do you know who to pull in?

AreaZR commented 3 days ago

Sadly no.

apple-fcloutier commented 2 days ago

@swift-ci test

porglezomp commented 2 days ago

Cross-linking for reference, this is the same change as https://github.com/llvm/llvm-project/pull/116683