-
-
Notifications
You must be signed in to change notification settings - Fork 607
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
aggregate, reduce the complexity of the loop checking the overlapped fields #9288
Conversation
Thanks for your pull request and interest in making D better, @Basile-z! We are looking forward to reviewing it, and you should be hearing from a maintainer soon.
Please see CONTRIBUTING.md for more information. If you have addressed all reviews or aren't sure how to proceed, don't hesitate to ping us with a simple comment. Bugzilla referencesYour PR doesn't reference any Bugzilla issue. If your PR contains non-trivial changes, please reference a Bugzilla issue or create a manual changelog. Testing this PR locallyIf you don't have a local development environment setup, you can use Digger to test this PR: dub fetch digger
dub run digger -- build "master + dmd#9288" |
fixup #9288, missing c++ counterpart to VarDecl class merged-on-behalf-of: Petar Kirov <[email protected]>
AFAICT this led to a regression, some overlapping fields in the following example apparently don't get their struct SWithUnion
{
char c;
S nested;
union
{
struct { ubyte ub = 6; ushort us = 33; align(8) ulong ul_dummy = void; ulong last = 123; }
struct { uint ui1; uint ui2 = 84; ulong ul = 666; }
}
} |
This goes more than one level deep, that's the problem, this code just looks at the direct variable children of anonymous unions (and thus skips the 2 nested anonymous structs in the example). It would have to descend into nested anonymous unions and structs too. I take it this was an attempt to improve performance (with any noticeable gains?); having to descend into subtrees etc. just makes this more complex and brittle, so I recommend a revert for 2.085. |
@kinke can you turn this into a bugzilla issue, and add a piece of code that fails under this PR? |
I'm swamped with LDC work. |
I understand, but you do have a test case that triggers the problem, it just needs to be purified. |
@kinke I created a bugzilla for this, https://issues.dlang.org/show_bug.cgi?id=19685 can you see about the test case? |
Done, thx for bugzillaing. |
Well, revert seems to be appropriated here since the commit was supposed to do the same thing. |
The problem is that align was not handled at all by this PR, so again, revert. |
Link to the revert PR: #9373 |
Ivan Butygin (2): jit: Move BindPtr to public (#3030) Jit: better error handling and handle correctly __chkstk function (#3051) Martin Kinkelin (103): Update CHANGELOG.md Initialize Azure Pipelines CI Set up CI with Azure Pipelines Azure CI: Add Win32 job Azure CI: Add package artifact Azure CI: Add Windows multilib job Azure CI: Use LLVM with enabled assertions for untagged builds Azure CI: Adjust artifact filenames for tagged builds Azure CI: Upload artifacts to GitHub release Azure CI: Don't litter src directory, add comments, ... Azure CI: Add Linux multilib & macOS x64 jobs Azure CI: Perform shallow git clone Azure CI: Misc. fixups TEMP: Use LLVM prebuilt by Azure CI Azure CI: Hack around druntime test failure for macOS 10.13 Remove AppVeyor CI Rededicate CircleCI Azure CI: Hack around full LTO integration test failure on macOS README.md: Replace AppVeyor badge by Azure one Azure CI: Set num parallel build/test jobs for Linux/Mac to num available CPU cores Update README.md Azure CI: Fix lit installation on Windows (#3008) Upgrade front-end & libs to v2.085.0-beta.1 Work around `enum TOK` C++ mangling issue/regression Fix union regression: Revert dlang/dmd#9288 Refactoring: Let mars.d handle cmdline reconciliation Fix tests/codegen/ptr_16_bit.d Add cmdline option -checkaction=context Add cmdline option -verrors-context (-verrors=context for LDMD) Add cmdline option -extern-std=c++{98,11,14,17} Try to restore compilability with ltsmaster druntime: Fix fwd declaration signature for precise GC Add cmdline options -preview and -revert Print transition/preview/revert usage help without src file Change behavior when invoking LDC/LDMD without source files dmd-testsuite: Disable a few new tests for LDC, incl. 'unit tests' Hide legacy cmdline options -dip<N> LDMD: Support -mcpu=h and -mcpu=help too Sync LDMD usage help with DMD's Upgrade to v2.085.0-rc.1 druntime: Allow overriding register_default_gcs() at link-time druntime: Fix linking issues with stdcpp stand-alone tests Disable druntime test 'gc' for shared-only druntime dmd-testsuite: Disable most Objective-C tests Disable dcompute lit-tests for now Advance phobos/dmd-testsuite properly (#3011) TEMP: Use early LDC-LLVM v8.0 incl. SPIRV-LLVM-Translator Adapt to latest LLVM 8 changes Restore -disable-fp-elim option for LLVM 8+ CMake: Find LLVMSPIRVLib library if built in-tree Hide a few new LLVM 8 cmdline options Travis: Switch macOS SPIR-V job to vanilla LLVM CMake: Simplify & fix LLD header detection ShippableCI: Sync/streamline with Azure, use prebuilt host compiler TEMP: Use early LDC-LLVM v8.0 for ShippableCI too dmd-testsuite: Tweak for better parallelization Parallelize compilation of LDC D unittests Update LLVM 8 llvm-profdata and FileCheck Enable opt-in GC for front-end via explicit -lowmem switch Keep AST expressions of DMD-style inline asm arguments alive Upgrade bundled dub to v1.14.0 (#3012) Keep IrFuncTyArg::type alive dmd-testsuite: Add rudimentary -lowmem tests Filter out --DRT-* options in the cmdline Re-enable cross-module-inlining for `pragma(inline, true)` Phobos: Force-inline more functions with __FILE__ as template parameter Don't exclude functions in object.d from cross-module inlining README.md: Switch Docker cmdline to Seb's Ubuntu images Upgrade to LLVM v8.0.0-rc4 Fix crash with -lowmem -mixin Shippable: Disable LTO integration tests (failing assertions with LLVM 8) README.md: Use nicer badges & add badge for latest release (#3016) Travis: Upgrade to Ubuntu 16.04 Azure & Shippable: Use LLVM without lib{tinfo,edit} dependencies CMake: Get rid of manual libtinfo/libpthread dependencies Azure CI: Try to make tags trigger automatic builds Azure CI: Work around GitHubRelease task overwriting isPreRelease flag Travis: Skip dmd-testsuite (release) on Mac to reduce time-outs Azure CI fixup dmd-testsuite: Parallelize building of tools (#3022) Use semver-friendly version for untagged builds SemaphoreCI: Use -lowmem when building dmd-testsuite tools in parallel Travis: Don't build with coverage instrumentation Travis: Skip dmd-testsuite-debug, only run release one CI: Switch to LDC-LLVM v8.0.0 final Azure: Yet another attempt at making tags trigger builds dmd-testsuite: Adapt & extend runnable/test13774.sh MSVC: Add {oldnames,legacy_stdio_definitions}.lib to default C libs (#3036) Don't emit object.RTInfo(Impl) instantiations in dcompute modules Revert "Disable dcompute lit-tests for now" Azure CI: Make prebuilt Linux package usable on Ubuntu 14.04 again (#3038) Travis: Add Linux LLVM 8.0 job & switch one Mac job to LLVM 8.0 Azure CI: Upgrade clang for Windows jobs to v8.0 Merge upstream stable (58878aeb) (#3039) Refactoring: Remove obsolete AttrBuilder wrapper Support generic ldc.attributes.llvmAttr UDAs for function parameters Only enforce SSSE3 (with -O) for LLVM 7.x (#3045) Auto-detect Visual Studio 2019+ (#3044) druntime: Add @restrict parameter UDA Propagate well-known length of newly allocated arrays (#3042) Upgrade to v2.085.1 Add declaration context to semantic errors Changelog: Add v1.15.0 Temtaime (1): Add lib files when linking for a static library
Based on the fact that overlapping is only possible in unions and anonymous unions (yes ?) it's possible to avoid a nested control loop iff
Little drawback : the second condition requires to add a field to the
VarDeclaration
class sinceAnonDeclaration
(i.e anonymous union or anonymous struct) is implemented as an attribute.