Closed Bug 258055 Opened 20 years ago Closed 20 years ago

compilation error "i" has already been declared in the current scope

Categories

(Core Graveyard :: GFX: Gtk, defect)

SGI
IRIX
defect
Not set
blocker

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: Rich.Fleck, Assigned: blizzard)

References

Details

(Keywords: fixed1.7.5)

Attachments

(1 file, 2 obsolete files)

User-Agent:       Mozilla/5.0 (X11; U; IRIX64 IP35; en-US; rv:1.7) Gecko/20040617
Build Identifier: http://ftp.mozilla.org/pub/mozilla.org/mozilla/nightly/latest-trunk/

compiler doesn't like scoping
I'm getting tired of moving variable definition

attached error message.

Reproducible: Always
Steps to Reproduce:
1.
2.
3.

Actual Results:  
Building deps for ../../../xpfe/bootstrap/nsAppRunner.cpp
CC -o nsAppRunner.o -c -DXPCOM_GLUE -DOSTYPE=\"IRIX6\" -DOSARCH=\"IRIX\"
-DSPLASH_XPM=\"../../../xpfe/bootstrap/splash.xpm\" -I../../../xpfe/bootstrap
-I. -I../../dist/include/xpcom -I../../dist/include/string
-I../../dist/include/webbrwsr -I../../dist/include/widget
-I../../dist/include/dom -I../../dist/include/necko -I../../dist/include/content
-I../../dist/include/pref -I../../dist/include/appshell -I../../dist/include/gfx
-I../../dist/include/xpinstall -I../../dist/include/uriloader
-I../../dist/include/windowwatcher -I../../dist/include/embed_base
-I../../dist/include/embedcomponents -I../../dist/include/docshell
-I../../dist/include/locale -I../../dist/include/profile
-I../../dist/include/jprof -I../../dist/include/xremoteservice
-I../../dist/include/apprunner -I../../dist/include
-I/usr/local/mozilla/obj-mips-sgi-irix6.5-1.8/dist/include/nspr        -KPIC  
-LANG:exceptions=OFF -woff 3262 -G 4 -n32  -DNDEBUG -DTRIMMED -O
-DWIDGET_DLL=\"libwidget_gtk.so\" -DGFXWIN_DLL=\"libgfx_gtk.so\"
-I/usr/freeware/include/gtk-1.2 -I/usr/freeware/include/glib-1.2
-I/usr/freeware/lib32/glib/include   -DMOZILLA_VERSION=\"1.8a3\" -DIRIX=1
-DNSCAP_DISABLE_DEBUG_PTR_TYPES=1 -DD_INO=d_ino -DSTDC_HEADERS=1
-DHAVE_ST_BLKSIZE=1 -DHAVE_SIGINFO_T=1 -DHAVE_INT16_T=1 -DHAVE_INT32_T=1
-DHAVE_INT64_T=1 -DHAVE_UINT=1 -DHAVE_UINT_T=1 -DHAVE_UINT16_T=1
-DHAVE_DIRENT_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MEMORY_H=1 -DHAVE_UNISTD_H=1
-DHAVE_NL_TYPES_H=1 -DHAVE_MALLOC_H=1 -DHAVE_X11_XKBLIB_H=1
-DHAVE_SYS_STATVFS_H=1 -DHAVE_SYS_STATFS_H=1 -DHAVE_SYS_CDEFS_H=1 -DHAVE_LIBM=1
-DHAVE_LIBDL=1 -DHAVE_LIBSOCKET=1 -DFUNCPROTO=15 -DHAVE_XSHM=1 -DHAVE_RANDOM=1
-DHAVE_STRERROR=1 -DHAVE_LCHOWN=1 -DHAVE_FCHMOD=1 -DHAVE_SNPRINTF=1
-DHAVE_MEMMOVE=1 -DHAVE_RINT=1 -DHAVE_STAT64=1 -DHAVE_LSTAT64=1
-DHAVE_FLOCKFILE=1 -DHAVE_LOCALTIME_R=1 -DHAVE_STRTOK_R=1
-DHAVE_LANGINFO_CODESET=1 -DHAVE_I18N_LC_MESSAGES=1
-DMOZ_DEFAULT_TOOLKIT=\"gtk\" -DMOZ_WIDGET_GTK=1 -DMOZ_ENABLE_XREMOTE=1
-DMOZ_X11=1 -DMOZ_APP_NAME=\"mozilla\" -DMOZ_ENABLE_COREXFONTS=1
-DMOZ_EXTRA_X11CONVERTERS=1 -DOJI=1 -DIBMBIDI=1 -DMOZ_VIEW_SOURCE=1
-DACCESSIBILITY=1 -DMOZ_XPINSTALL=1 -DMOZ_JSLOADER=1 -DMOZ_MATHML=1
-DMOZ_LOGGING=1 -DMOZ_USER_DIR=\".mozilla\" -DMOZ_XUL=1 -DMOZ_PROFILESHARING=1
-DMOZ_PROFILELOCKING=1 -DMOZ_DLL_SUFFIX=\".so\" -DXP_UNIX=1 -DUNIX_ASYNC_DNS=1
-DJS_THREADSAFE=1 -DNS_PRINT_PREVIEW=1 -DNS_PRINTING=1
-DMOZILLA_LOCALE_VERSION=\"1.8a\" -DMOZILLA_REGION_VERSION=\"1.8a\"
-DMOZILLA_SKIN_VERSION=\"1.5\"  -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT
../../../xpfe/bootstrap/nsAppRunner.cpp
cc-1101 CC: ERROR File = ../../../xpfe/bootstrap/nsAppRunner.cpp, Line = 1698
  "i" has already been declared in the current scope.

    for (int i=1; i<argc; i++)
             ^

1 error detected in the compilation of "../../../xpfe/bootstrap/nsAppRunner.cpp".
gmake[2]: *** [nsAppRunner.o] Error 2
gmake[2]: Leaving directory
`/usr/local/mozilla/obj-mips-sgi-irix6.5-1.8/xpfe/bootstrap'
gmake[1]: *** [tier_99] Error 2
gmake[1]: Leaving directory `/usr/local/mozilla/obj-mips-sgi-irix6.5-1.8'
gmake: *** [default] Error 2
Roland's patch for bug 235188 broke this back in March by not following our
portability guidelines and not checking whether that's ok (and it's only our
lack of an IRIX-cc tinderbox that kept us from noticing).

The relevant code (condensed) looks like:

#ifdef MOZ_X11
for (int i=1; i<argc; i++) {
}
#endif
#if defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_GTK2)
for (int i=1; i<argc; i++) {
}
#endif

Due to the buggy scoping in the compiler in question, the "i"s both end up in
the parent scope of the for loops.

ccing patch author and reviewers, and reassigning to the component most closely
responsible for this whole bunch of code...  also ccing CTho on the chance that
he's interested in fixing this up.
Assignee: general → blizzard
Severity: minor → blocker
Status: UNCONFIRMED → NEW
Component: Browser-General → GFX: Gtk
Ever confirmed: true
QA Contact: general → ian
Isn't this just a matter of moving the "int i" statement to the top of the
function? That should fix this.
Quick patch to fix this issue. There's one other case of a for(int i...
construct in the function, but that function consists almost entirely of that
for loop, and it should not need to have another loop after it.
Attachment #157924 - Attachment is obsolete: true
Alternate fix. This uses blocks to fix the scoping issues. It also avoids
having an extra int floating around for the duration of the program (since this
is in main). I don't know which of the methods is better, so requesting review
of them both
Attachment #157931 - Flags: review?(blizzard)
Attachment #157932 - Flags: review?(blizzard)
http://www.mozilla.org/hacking/portable-cpp.html#variables_in_for
suggests using a different variable name (j)...
Actually, the standard suggests either renaming or declaring before the loop.
The creation of blocks is another way of making the code portable. The blocks
way loses a tiny bit of time in creating the blocks, renaming the variables
wastes 2 ints of memory throught the runtime on compilers that would have this
compile error, and the declaring of the int at the top wastes 1 int of memory
throughout the runtime of the process. Also, the problem was actually caused
when the X11 code was inserted, although the error appears later on in the GTK
code. So perhaps browser general was an appropriate place for the bug.
Attachment #157931 - Flags: superreview+
Attachment #157931 - Flags: review?(blizzard)
Attachment #157931 - Flags: review+
In modern optimizing compilers all these different ways of writing the source
will produce exactly the same final code, so just do what looks nicest. In this
case declaring the variable outside the 'for' is fine, and this is such a minor
issue that we shouldn't spend any more time thinking about it.
Comment on attachment 157932 [details] [diff] [review]
Places the for loops in separate blocks instead of moving int i

Marking as obsolete since other patch is now r/sr+
Attachment #157932 - Attachment is obsolete: true
Attachment #157932 - Flags: review?(blizzard)
Robert: Do you think you could land this patch so we can close this up?
checked in
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Comment on attachment 157931 [details] [diff] [review]
Adds comment to previous patch

Not relevant to aviary branch.

/be
Attachment #157931 - Flags: approval-aviary?
What compiler is this, exactly?  (And are you sure it doesn't have a
command-line option to fix this broken behavior?)
David Baron asked which compiler and what options are available.

cc -version
MIPSpro Compilers: Version 7.3.1.3m
 Watt: [24] cc -help
usage:  cc <options> <files>
available options:
        -64:  compile for 64-bit ABI
        -A:  add following cpp assertions
        -C:  C/C++: keep C comments after cpp; f77: runtime subscript checking
        -CG::  option group to control code generation
        -CLIST::  option group to control C source listing of compiler intermediate
        -D:  add following macro define
        -DEBUG::  option group to debugging options
        -DEFAULT::  default options (abi,isa,proc)
        -E:  run cpp and send result to standard output
        -GRA::  option group to control global register allocation
        -H:  -H<phase> Halt after phase {p=cpp,f=fe,b=be,a=as,l=ld}
        -I:  add following directory to the include search path list
        -INLINE:  request inline processing
        -INLINE::  specify inline processing option group
        -INTERNAL::  option group to control features while testing
        -IPA:  Perform interprocedural analysis and optimization
        -IPA::  option group to control interprocedural optimizations
        -L:  add following directory to the library search path list
        -LANG::  option group to control language features
        -LIST::  option group to control listing file and contents
        -LMSG::  option group to control error/warning messages in ld
        -LNO::  option group to control loop nest optimization
        -M:  run cpp and print list of make dependencies
        -MDtarget:  use the following as the target for make dependencies
        -MDupdate:  update the following file with make dependencies
        -MP::  option group to control distributed shared memory optimization
        -O:  same as -O2
        -O0:  no optimization
        -O1:  minimal optimization
        -O2:  global optimization
        -O3:  full optimization
        -OPT::  option group to control optimization
        -Ofast:  default fast option configuration
        -Ofast=:  processor-specific fast option configuration
        -P:  run cpp and send result to .i file
        -PROMP::  option group to generate ProMP analysis file
        -PROMP:next_id=:  specify the loop id used by ProMP annotation
        -R:  pass flags to RATFOR
        -S:  produce a .s and stop
        -SWP::  option group to control software pipelining
        -TARG::  option group to control compilation target
        -TENV::  option group to control target environment
        -U:  undefine the following macro
        -VHO::  option group to control vho lowering
        -W:  -W<phase>,<arg> sends arg to phase {p=cpp,f=fe,b=be,a=as,l=ld}
        -WB,:  -WB,<arg> passes <arg> to the back-end via ipacom
        -WOPT::  option group internal-use WOPT options
        -Xa:  extended ansi C
        -Xc:  strict ansi C
        -Xt:  K&R compatible C
        -Y:  -Y<phase>,<path> uses path to find phase
{p=cpp,f=fe,b=be,a=as,l=ld,I=include,S=startup,L=libraries}
        -abi:  generate strict-abi-compliant object files
        -align128:  align data in common blocks to 128-bit boundaries
        -align16:  align data in common blocks to 16-bit boundaries
        -align32:  align data in common blocks to 32-bit boundaries
        -align64:  align data in common blocks to 64-bit boundaries
        -align8:  align data in common blocks to 8-bit boundaries
        -ansi:  strict ansi
        -ansiE:  issue error message for non standard features
        -ansiW:  issue warning messages for non standard features
        -apo:  run Auto Parallel Optimizer
        -apokeep:  run Auto Parallel Optimizer and keep listing and pfa output
        -apolist:  run Auto Parallel Optimizer and keep listing
        -ar:  create an archive (instead of a shared object or executable) using ar
        -bigp_off:  Disable large pages
        -bigp_on:  Enable large pages
        -c:  produce a .o and stop
        -call_shared:  call-shared PIC code
        -cckr:  K&R compatible C
        -common:  use relaxed ref/def model
        -cord:  Run cord
        -diag_error:  make named diagnostics into errors
        -diag_remark:  make named diagnostics into remarks
        -diag_suppress:  turn off named diagnostics
        -diag_warning:  make named diagnostics into warnings
        -dsm:  enable the DSM directives
        -dsm_check:  generate code to do reshape consistency check for args at
run-time
        -dsm_clone:  run dsm prelinker with cloning for distributed reshaped arrays
        -dsm_recompile:  tell the fe and be to not touch rii files
        -fb:  Specify feedback file for be
        -fb_cdir:  Option needed to tell pixie where to emit the Count Files
        -fb_create:  Option needed for SPEC feedback file generation
        -fb_opt:  Option needed for using SPEC feedback files
        -fb_xdir:  Option needed to tell pixie where to emit the pixified dso's 
        -fbexe:  Option needed to specify the name of the pixified binary to prof
        -fbgen:  Option needed for generating feedback files for spec
        -fbuse:  Option needed to use feedback files for spec
        -fe:  stop after the front end is run
        -feedback:  Specify feedback file for cord
        -float:  don't automatically promote floats to doubles
        -float_const:  treat floating point constants as floats rather than doubles
        -fullwarn:  give more warnings, especially about missing prototypes
        -g:  full debug info
        -g0:  no debug info
        -g3:  add some debugging to optimized code
        -gslim:  put out slim class debug info
        -gslim0:  put out slim class debug info
        -gslim2:  put out slim class debug info
        -help:  print list of possible options
        -help::  print list of possible options that contain given string
        -i32:  compile for Intel 32-bit ABI
        -i64:  compile for Intel 64-bit ABI
        -ignore_suffix:  ignore source suffix when determining compiler language
        -inline:  request inline processing
        -ipa:  Perform interprocedural analysis and optimization
        -keep:  keep intermediate files
        -l:  -l<arg> adds library lib<arg> to link list
        -memctr:  instrument for Origin memory counters
        -memsim:  instrument for memsim
        -mips1:  compile for mips1 instruction set
        -mips2:  compile for mips2 instruction set
        -mips3:  compile for mips3 instruction set
        -mips4:  compile for mips4 instruction set
        -mp:  enable the multiprocessing directives
        -nocpp:  don't do cpp processing
        -noinline:  suppress inline processing
        -non_shared:  compile non-shared (no DSO's)
        -nostdinc:  no predefined include search path list
        -nostdlib:  no predefined library search path list
        -o:  put output in following file name rather than a.out
        -objectlist:  Read the following file to get a list of files to be linked
        -pca:  run Power C Analyzer
        -pcakeep:  run Power C Analyzer and keep listing and pca output
        -pcalist:  run Power C Analyzer and keep listing
        -pfa:  run Power Fortran Analyzer
        -pfakeep:  run Power Fortran Analyzer and keep listing and pfa output
        -pfalist:  run Power Fortran Analyzer and keep listing
        -promp:  Activate promp generation of .anl and .m files
        -qikki:  Quick C/C++ frontend
        -r:  produce a relocatable .o and stop
        -shared:  dso-shared PIC code
        -show:  show phases as they are being invoked
        -show0:  show what phases would be called, but don't invoke anything
        -show_defaults:  show default values
        -showm:  show memory usage by each phase
        -showt:  show time taken by each phase
        -signed:  characters are signed by default
        -trapuv:  trap uninitialized variables
        -unsigned:  character are unsigned by default
        -v:  show phases as they are being invoked
        -version:  Show the version of the compiler being used
        -woff:  turn off named warnings
        -woffall:  turn off all warnings
        -woffoptions:  turn off warnings about options
        -xansi:  extended ansi C
        -ivpad:  inter-variable padding of common blocks
        -split_common:  check split COMMON for inconsistencies and fix them
The environment variable SGI_CC is also checked

CC -version
MIPSpro Compilers: Version 7.3.1.3m
 Watt: [26] CC -help
usage:  CC <options> <files>
available options:
        -64:  compile for 64-bit ABI
        -A:  add following cpp assertions
        -C:  C/C++: keep C comments after cpp; f77: runtime subscript checking
        -CG::  option group to control code generation
        -D:  add following macro define
        -DEBUG::  option group to debugging options
        -DEFAULT::  default options (abi,isa,proc)
        -E:  run cpp and send result to standard output
        -GRA::  option group to control global register allocation
        -H:  -H<phase> Halt after phase {p=cpp,f=fe,b=be,a=as,l=ld}
        -I:  add following directory to the include search path list
        -INLINE:  request inline processing
        -INLINE::  specify inline processing option group
        -INTERNAL::  option group to control features while testing
        -IPA:  Perform interprocedural analysis and optimization
        -IPA::  option group to control interprocedural optimizations
        -J:  maximum number of jobs spawned by prelinker
        -L:  add following directory to the library search path list
        -LANG::  option group to control language features
        -LANG:std:  Use ISO/ANSI standard-conforming C++ language and library
        -LIST::  option group to control listing file and contents
        -LMSG::  option group to control error/warning messages in ld
        -LNO::  option group to control loop nest optimization
        -M:  run cpp and print list of make dependencies
        -MDtarget:  use the following as the target for make dependencies
        -MDupdate:  update the following file with make dependencies
        -MP::  option group to control distributed shared memory optimization
        -O:  same as -O2
        -O0:  no optimization
        -O1:  minimal optimization
        -O2:  global optimization
        -O3:  full optimization
        -OPT::  option group to control optimization
        -Ofast:  default fast option configuration
        -Ofast=:  processor-specific fast option configuration
        -P:  run cpp and send result to .i file
        -PROMP::  option group to generate ProMP analysis file
        -PROMP:next_id=:  specify the loop id used by ProMP annotation
        -R:  pass flags to RATFOR
        -S:  produce a .s and stop
        -SWP::  option group to control software pipelining
        -TARG::  option group to control compilation target
        -TENV::  option group to control target environment
        -U:  undefine the following macro
        -VHO::  option group to control vho lowering
        -W:  -W<phase>,<arg> sends arg to phase {p=cpp,f=fe,b=be,a=as,l=ld}
        -WB,:  -WB,<arg> passes <arg> to the back-end via ipacom
        -WOPT::  option group internal-use WOPT options
        -Y:  -Y<phase>,<path> uses path to find phase
{p=cpp,f=fe,b=be,a=as,l=ld,I=include,S=startup,L=libraries}
        -abi:  generate strict-abi-compliant object files
        -align128:  align data in common blocks to 128-bit boundaries
        -align16:  align data in common blocks to 16-bit boundaries
        -align32:  align data in common blocks to 32-bit boundaries
        -align64:  align data in common blocks to 64-bit boundaries
        -align8:  align data in common blocks to 8-bit boundaries
        -anach:  allow anachronisms
        -ansiE:  issue error message for non standard features
        -ansiW:  issue warning messages for non standard features
        -apo:  run Auto Parallel Optimizer
        -apokeep:  run Auto Parallel Optimizer and keep listing and pfa output
        -apolist:  run Auto Parallel Optimizer and keep listing
        -ar:  create an archive (instead of a shared object or executable) using ar
        -bigp_off:  Disable large pages
        -bigp_on:  Enable large pages
        -brief_diagnostics:  issue one-line diagnostic messages
        -c:  produce a .o and stop
        -call_shared:  call-shared PIC code
        -cfront:  cfront-compatible
        -cord:  Run cord
        -diag_error:  make named diagnostics into errors
        -diag_remark:  make named diagnostics into remarks
        -diag_suppress:  turn off named diagnostics
        -diag_warning:  make named diagnostics into warnings
        -dsm:  enable the DSM directives
        -dsm_check:  generate code to do reshape consistency check for args at
run-time
        -dsm_clone:  run dsm prelinker with cloning for distributed reshaped arrays
        -dsm_recompile:  tell the fe and be to not touch rii files
        -exceptions:  turn on support for exception-handling
        -experimental:  Experimental C++ frontend that was supported in 7.1 release
        -fb:  Specify feedback file for be
        -fb_cdir:  Option needed to tell pixie where to emit the Count Files
        -fb_create:  Option needed for SPEC feedback file generation
        -fb_opt:  Option needed for using SPEC feedback files
        -fb_xdir:  Option needed to tell pixie where to emit the pixified dso's 
        -fbexe:  Option needed to specify the name of the pixified binary to prof
        -fbgen:  Option needed for generating feedback files for spec
        -fbuse:  Option needed to use feedback files for spec
        -fe:  stop after the front end is run
        -feedback:  Specify feedback file for cord
        -fullwarn:  give more warnings, especially about missing prototypes
        -g:  full debug info
        -g0:  no debug info
        -g3:  add some debugging to optimized code
        -generate_instantiation_info:  Internal option - Used by the C++
prelinker to the frontend
        -gslim:  put out slim class debug info
        -gslim0:  put out slim class debug info
        -gslim2:  put out slim class debug info
        -help:  print list of possible options
        -help::  print list of possible options that contain given string
        -i32:  compile for Intel 32-bit ABI
        -i64:  compile for Intel 64-bit ABI
        -ignore_suffix:  ignore source suffix when determining compiler language
        -inline:  request inline processing
        -ipa:  Perform interprocedural analysis and optimization
        -keep:  keep intermediate files
        -l:  -l<arg> adds library lib<arg> to link list
        -memctr:  instrument for Origin memory counters
        -memsim:  instrument for memsim
        -mips1:  compile for mips1 instruction set
        -mips2:  compile for mips2 instruction set
        -mips3:  compile for mips3 instruction set
        -mips4:  compile for mips4 instruction set
        -mp:  enable the multiprocessing directives
        -no_exceptions:  turn off support for exception-handling (default)
        -no_prelink:  do not use prelinker (i.e. instantiate all templates
immediately)
        -nobool:  disallow bool keyword
        -noinline:  suppress inline processing
        -non_shared:  compile non-shared (no DSO's)
        -nostdinc:  no predefined include search path list
        -nostdlib:  no predefined library search path list
        -o:  put output in following file name rather than a.out
        -objectlist:  Read the following file to get a list of files to be linked
        -pca:  run Power C Analyzer
        -pcalist:  run Power C Analyzer and keep listing
        -pfa:  run Power Fortran Analyzer
        -pfakeep:  run Power Fortran Analyzer and keep listing and pfa output
        -pfalist:  run Power Fortran Analyzer and keep listing
        -prelink:  use prelinker (default)
        -promp:  Activate promp generation of .anl and .m files
        -qikki:  Quick C/C++ frontend
        -quiet_prelink:  Suppress prelinker invocation messages
        -r:  produce a relocatable .o and stop
        -shared:  dso-shared PIC code
        -show:  show phases as they are being invoked
        -show0:  show what phases would be called, but don't invoke anything
        -show_defaults:  show default values
        -showm:  show memory usage by each phase
        -showt:  show time taken by each phase
        -signed:  characters are signed by default
        -trapuv:  trap uninitialized variables
        -unsigned:  character are unsigned by default
        -v:  show phases as they are being invoked
        -version:  Show the version of the compiler being used
        -woff:  turn off named warnings
        -woffall:  turn off all warnings
        -woffoptions:  turn off warnings about options
        -ivpad:  inter-variable padding of common blocks
        -split_common:  check split COMMON for inconsistencies and fix them
http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=bks&srch=&fname=/SGI_Developer/CC_PG/sgi_html/ch03.html
suggests that correct for-loop scoping is the default, but that doesn't seem to
be the case.  But does that happen if you add one or both of the following options?

-LANG:std:
-LANG:ansi-for-init-scope=on:
(In reply to comment #17)
> -LANG:std:
> -LANG:ansi-for-init-scope=on:

Actually, I think that should be:

-LANG:std
-LANG:ansi-for-init-scope    (or perhaps -LANG:ansi-for-init-scope=on)
Setting 
-LANG:std
or
-LANG:ansi-for-init-scope

eliminates the error message and lets it compile

I'll leave it to you to figure out how to get it in the configure.
I filed bug 260712 on fixing the compiler options.
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: